Cod sursa(job #2429069)

Utilizator baltoi.teodorTeodor Baltoi baltoi.teodor Data 7 iunie 2019 16:10:48
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
typedef long long ll;
ll Mn[5][5];
ll M1[5][5];
void inm(ll A[5][5], ll B[5][5])
{
    ll C[5][5];
    for(int i=1;i<=2;++i)
        for(int j=1;j<=2;++j) C[i][j]=0;
    for(int i=1;i<=2;++i)
    {
        for(int j=1;j<=2;++j)
        {
            for(int z=1;z<=2;++z)
                C[i][j]+=A[i][z]*B[z][j],C[i][j]%=MOD;
        }
    }
    for(int i=1;i<=2;++i)
    {
        for(int j=1;j<=2;++j)
            A[i][j]=C[i][j];
    }
}
void lgput(int b)
{
    while(b)
    {
        while(b%2==0) {
            inm(M1,M1);
            b/=2;
        }
        if(b%2) inm(Mn,M1),b--;
    }
}
int main()
{
    int n;
    fin>>n;
    M1[1][1]=0;
    M1[1][2]=1;
    M1[2][1]=1;
    M1[2][2]=1;
    Mn[1][1]=1;
    Mn[1][2]=0;
    Mn[2][1]=0;
    Mn[2][2]=1;

    lgput(n-1);
    fout<<Mn[2][2]<<"\n";
    return 0;
}