Cod sursa(job #1922662)

Utilizator george_stelianChichirim George george_stelian Data 10 martie 2017 18:19:49
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <vector>

using namespace std;

const int N=2,mod=666013;

struct matrice
{
    vector<vector<int> > v;
    matrice()
    {
        v.resize(N,vector<int>(N,0));
    }
    matrice operator *(const matrice &aux) const
    {
        matrice ret;
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                for(int k=0;k<N;k++)
                    ret.v[i][k]=(ret.v[i][k]+1LL*v[i][j]*aux.v[j][k])%mod;
        return ret;
    }
    void unitate()
    {
        for(int i=0;i<N;i++) v[i][i]=1;
    }
};

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

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