Cod sursa(job #2809383)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 26 noiembrie 2021 20:27:30
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
long long n,i,j,mat[5][5],c[5][5],aux[5][5];
void inmultire(long long a[][5],long long b[][5],long long c[][5])
{
    long long i,j,k;
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
            for(k=0;k<2;k++)
                c[i][j]=(c[i][j]+a[i][k]*b[k][j]%MOD)%MOD;
}
signed main()
{
    fin>>n;
    mat[0][0]=mat[1][1]=1;
    c[0][1]=c[1][0]=c[1][1]=1;
    while(n)
    {
        if(n%2==1)
        {
            memset(aux,0,sizeof(aux));
            inmultire(mat,c,aux);
            memcpy(mat,aux,sizeof(aux));
        }
        memset(aux,0,sizeof(aux));
        inmultire(c,c,aux);
        memcpy(c,aux,sizeof(aux));
        n/=2;
    }
    fout<<mat[0][1];
    return 0;
}