Cod sursa(job #1822070)

Utilizator tqmiSzasz Tamas tqmi Data 4 decembrie 2016 10:26:17
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int N[3][3];
int Z[3][3];
int K;

void mult(int A[3][3], int B[3][3])
{
    int C[3][3];
    memset(C,0,sizeof(C));
    for(int i=1;i<=2;++i)
    {
        for(int j=1;j<=2;++j)
        {
            long long s=0;
            for(int k=1;k<=2;k++)
            {
                s+=1LL*A[i][k]*B[k][j];
            }
            C[i][j]=s%MOD;
        }
    }
    memcpy(A,C,sizeof(C));
}

void read()
{
    fin>>K;
}

void solve()
{
    N[1][2]=Z[1][2]=Z[2][1]=Z[2][2]=1;
    while(K)
    {
        if(K&1)
        {
            mult(N,Z);
        }
        K=K>>1;
        mult(Z,Z);
    }
}

void print()
{
    fout<<N[1][1]<<"\n";
}


int main()
{
    read();
    solve();
    print();
    return 0;
}