Cod sursa(job #2521395)

Utilizator aser.cobaschiCobaschi Aser aser.cobaschi Data 10 ianuarie 2020 20:07:49
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 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;i++)
    for(int k=0;k<2;i++)
        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;
}