Cod sursa(job #1647684)

Utilizator george_stelianChichirim George george_stelian Data 10 martie 2016 21:38:28
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

using namespace std;

const int maxn=2,mod=666013;

struct matrice
{
    int v[maxn+1][maxn+1];
    matrice operator *(const matrice &a) const
    {
        matrice s;
        for(int i=1;i<=maxn;i++)
            for(int j=1;j<=maxn;j++)
            {
                s.v[i][j]=0;
                for(int k=1;k<=maxn;k++) s.v[i][j]=(s.v[i][j]+1LL*v[i][k]*a.v[k][j])%mod;
            }
        return s;
    }
    void unitate()
    {
        for(int i=1;i<=maxn;i++)
            for(int j=1;j<=maxn;j++) v[i][j]=(i==j);
    }
};

matrice rid_put(matrice a,int n)
{
    matrice p;
    p.unitate();
    for(int i=1;i<=n;i<<=1)
    {
        if(n&i) p=p*a;
        a=a*a;
    }
    return p;
}

int main()
{
    freopen("kfib.in", "r", stdin);
    freopen("kfib.out", "w", stdout);
    int k;
    scanf("%d",&k);
    matrice a;
    a.v[1][1]=0;
    a.v[1][2]=a.v[2][1]=a.v[2][2]=1;
    matrice ret=rid_put(a,k);
    printf("%d",ret.v[2][1]);
    return 0;
}