Cod sursa(job #2489461)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 8 noiembrie 2019 20:00:27
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
#define MOD 666013
int K;
long long Default [2][2] = {{0, 1},
                            {1, 1}};
long long ans [2][2] = {{0, 1},
                        {0, 0}};
void Inmultire (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 lgput (int n) {
    while (n != 0){
        if (n & 1)Inmultire (ans, Default);
        n >>= 1;
        Inmultire (Default, Default);
    }
    return ans [0][0];
}
int main (){
    fin >> K;
    fout << lgput(K);
    return 0;
}