Cod sursa(job #2427556)

Utilizator PrekzursilAndrei Visalon Prekzursil Data 31 mai 2019 23:27:36
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;
const int MOD = 666013;
ifstream f("kfib.in");
ofstream g("kfib.out");
inline int suma(int u,int v){u=(u+v)%MOD;return u;}
inline int prod(int u,int v){u=1LL*u*v%MOD;return u;}
struct matrix
{
    int M[2][2];
    matrix(){M[0][0]=0;M[0][1]=0;M[1][0]=0;M[1][1]=0;}
    matrix(int a,int b,int c,int d){M[0][0]=a;M[0][1]=b;M[1][0]=c;M[1][1]=d;}
};
matrix operator*(matrix A,matrix B)
{
    matrix C;
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
                C.M[i][j]=suma(C.M[i][j],prod(A.M[i][k],B.M[k][j]));
    return C;
}
matrix operator^(matrix B,int e)
{
    if(e==0)return matrix(1,0,0,1);
    matrix R=B^(e/2);
    R=R*R;
    if(e%2)R=R*B;
    return R;
}
int main()
{
    int n;
    f >> n;
    g<<(matrix(1,1,1,0)^n).M[0][1];
    return 0;
}