Cod sursa(job #1838000)

Utilizator BLz0rDospra Cristian BLz0r Data 30 decembrie 2016 19:35:34
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <cstring>
using namespace std;

#define MOD 666013

ifstream fin("kfib.in");
ofstream fout("kfib.out");

typedef int Matrix[2][2];

// inmultire de matrice
void MultMat(Matrix &A, Matrix &B, Matrix &C) {

    memset(C, 0, sizeof(C));

    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 2; ++j) {
            for (int k = 0; k < 2; ++k) {
                C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % MOD;
            }
        }
    }

    memcpy(A, C, sizeof(C));
}

int aux[2][2], Rez[2][2] = { { 0, 1 } };

// ridicare la putere de matrice
void LgPow(int N) {
    int A[2][2] = { {0, 1},
                    {1, 1} };

    while (N > 0) {

        if (N & 1)
            MultMat(Rez, A, aux);

        N >>= 1;
        MultMat(A, A, aux);
    }
}

int main() {

    int N;

    fin >> N;
    LgPow(N - 1); // rezolvam recurenta de la fibonacci

    fout << Rez[0][1];

    return 0;
}