Cod sursa(job #2521398)

Utilizator aser.cobaschiCobaschi Aser aser.cobaschi Data 10 ianuarie 2020 20:09:51
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
const int Mod=666013;
int suma(int x,int y)
{
    x=(x+y)%Mod;
    return x;
}
int prod(int x,int y)
{
    x=1LL*x*y%Mod;
    return x;
}
struct matrix
{
    int M[2][2];
    matrix()
    {
        for(int i=0; i<2; i++)for(int j=0; j<2; j++)M[i][j]=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 p;
    for(int i=0; i<2; i++)
        for(int j=0; j<2; j++)
            for(int k=0; k<2; k++)
                p.M[i][j]=suma(p.M[i][j],prod(a.M[i][k],b.M[k][j]));
    return p;
}
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 k;
    f>>k;
    g<<(matrix(1,1,1,0)^k).M[0][1];
    return 0;
}