Cod sursa(job #2456769)

Utilizator nTropicGravityesadasdwaadwqafr nTropicGravity Data 15 septembrie 2019 14:10:42
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include    <fstream>
#include    <cstring>

using namespace std;

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

#define MOD 666013

int K;
long long baseCase[2][2] = {{0, 1}, {1, 1}};
long long Result[2][2] = {{0, 1}, {0, 0}};

void Multiply(long long A[2][2], long long B[2][2]) {
    long long C[2][2];

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

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

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

long long logPower(int K) {
    while (K) {
        if (K & 1)
            Multiply(Result, baseCase);

        K >>= 1;
        Multiply(baseCase, baseCase);
    }

    return Result[0][0];
}

int main() {
    fin >> K;
    fout << logPower(K);
}