Cod sursa(job #1746454)

Utilizator george_stelianChichirim George george_stelian Data 23 august 2016 13:09:54
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <algorithm>
#include <ctime>
#include <cstring>

using namespace std;

const int Dim=2,mod=666013;

struct matrice
{
    int v[Dim][Dim];
    matrice()
    {
        memset(v,0,sizeof(v));
    }
    void unitate()
    {
        for(int i=0;i<Dim;i++) v[i][i]=1;
    }
    matrice operator *(const matrice a) const
    {
        matrice rez;
        for(int i=0;i<Dim;i++)
            for(int j=0;j<Dim;j++)
                for(int k=0;k<Dim;k++)
                    rez.v[i][j]=(rez.v[i][j]+1LL*v[i][k]*a.v[k][j])%mod;
        return rez;
    }
};

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

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