Cod sursa(job #2187142)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 26 martie 2018 11:34:27
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <cstdio>
#define MOD 666013

using namespace std;
int n;
int fib[2][2]={{1,1},{1,0}};
int rid[2][2]={{1,0},{0,1}};
void inmultire(int m1[2][2],int m2[2][2])
{
    int c[2][2];
    c[0][0]=(1LL*m1[0][0]*m2[0][0]%MOD+1LL*m1[0][1]*m2[1][0]%MOD)%MOD;
    c[0][1]=(1LL*m1[0][0]*m2[0][1]%MOD+1LL*m1[0][1]*m2[1][1]%MOD)%MOD;
    c[1][0]=(1LL*m1[1][0]*m2[0][0]%MOD+1LL*m1[1][1]*m2[1][0]%MOD)%MOD;
    c[1][1]=(1LL*m1[1][0]*m2[0][1]%MOD+1LL*m1[1][1]*m2[1][1]%MOD)%MOD;
    m1[0][0]=c[0][0];
    m1[0][1]=c[0][1];
    m1[1][0]=c[1][0];
    m1[1][1]=c[1][1];

}
void putere()
{
    while(n)
    {
        if(n%2)
        {
            inmultire(rid,fib);
            --n;
        }
        n/=2;
        inmultire(fib,fib);
    }
}
int main()
{
    freopen("kfib.in","r",stdin);
    freopen("kfib.out","w",stdout);
    scanf("%d", &n);
    n-=2;
    putere();
    cout<<(1LL*rid[0][0]+rid[1][0])%MOD;
    return 0;
}