Cod sursa(job #3166450)

Utilizator MegaCoderMinoiu Teodor Mihai MegaCoder Data 8 noiembrie 2023 19:25:24
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
std::ifstream fin("kfib.in");
std::ofstream fout("kfib.out");
#define mod 666013
long long mat[2][2]={1, 1, 1, 0};
long long prod[2][2]={1, 0, 0, 1};
void multiplyMat(long long a[2][2], long long b[2][2])
{
    long long aux[2][2];
    for(int index=0; index<2; ++index)
        for(int next=0; next<2; ++next)
        {
            long long s=0;
            for(int k=0; k<2; ++k)
                s=(s+(a[index][k]*b[k][next])%mod)%mod;
            aux[index][next]=s;
        }
    for(int index=0; index<2; ++index)
        for(int next=0; next<2; ++next)
            a[index][next]=aux[index][next];
}
void put(int power)
{
    while(power)
    {
        if(power%2)
            multiplyMat(prod, mat);
        multiplyMat(mat, mat);
        power/=2;
    }
}
int main()
{
    int num;
    fin>>num;
    put(num-1);
    fout<<(prod[0][0]+prod[0][1])%mod;
    return 0;
}
//660634