Cod sursa(job #1792038)

Utilizator adu18sptAndrei Mircea adu18spt Data 29 octombrie 2016 23:08:27
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>
 
using namespace std;

ifstream fin("kfib.in");
ofstream fout("kfib.out");

const int mod=666013;
int dim;
 
struct matrice
{
    vector<vector<int> > v;
    matrice()
    {
        v.resize(dim+1,vector<int>(dim+1,0));
    }
    void unitate()
    {
        for(int i=1;i<=dim;i++) v[i][i]=1;
    }
    matrice operator *(const matrice &aux) const
    {
        matrice ret;
        for(int i=1;i<=dim;i++)
            for(int j=1;j<=dim;j++)
                for(int k=1;k<=dim;k++)
                    ret.v[i][j]=(ret.v[i][j]+1LL*v[i][k]*aux.v[k][j])%mod;
        return ret;
    }
};
 
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()
{
    
    int k;
   	fin>>k;
    dim=2;
    matrice a;
    a.v[1][1]=0;
    a.v[1][2]=a.v[2][1]=a.v[2][2]=1;
    a=rid_put(a,k-1);
    fout<<a.v[2][2];
    return 0;
}