Cod sursa(job #2053834)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 1 noiembrie 2017 14:10:52
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
# include <fstream>
# define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int v[3][3],a[3][3],n,pas;
void inmultire(int a[3][3],int b[3][3],int c[3][3]){
    int d[3][3];
    for(int i=1;i<=2;i++)
        for(int j=1;j<=2;j++){
            long long x=0;
            for(int k=1;k<=2;k++)
                x+=1LL*b[i][k]*c[k][j];
            d[i][j]=x%MOD;
        }
    for(int i=1;i<=2;i++)
        for(int j=1;j<=2;j++)
            a[i][j]=d[i][j];
}
int main () {
    fin>>n;
    n-=2;
    v[1][1]=v[1][2]=v[2][1]=1;
    a[1][1]=a[2][2]=1;
    for(pas=1;n;pas*=2){
        if((n&pas)){
            inmultire(a,a,v);
            n-=pas;
        }
        inmultire(v,v,v);
    }
    fout<<(a[1][1]+a[1][2])%MOD;
    return 0;
}