Cod sursa(job #1393223)

Utilizator sandugavrilaGavrila Alexandru sandugavrila Data 19 martie 2015 10:42:58
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>

using namespace std;
const int p=666013;
struct mat
{
    long long a,b,c,d;
};
inline mat mult(mat A,mat B)
{
    mat AUX;
    AUX.a=(A.a*B.a%p+A.b*B.c%p)%p;
    AUX.b=(A.a*B.b%p+A.b*B.d%p)%p;
    AUX.c=(A.c*B.a%p+A.d*B.c%p)%p;
    AUX.d=(A.c*B.b%p+A.d*B.d%p)%p;
    return AUX;
}
inline mat exp(long long k,mat Z)
{
    if(k==1) return Z;
    else
    {
        mat AUX=exp(k/2,Z);
        if(k%2==0)
            return mult(AUX,AUX);
        else
            return mult(mult(AUX,AUX),Z);
    }

}
int main()
{
    long long k;
    freopen("kfib.in","r",stdin);
    freopen("kfib.out","w",stdout);
    mat Z;
    scanf("%lld",&k);
    Z.a=0;Z.b=Z.c=Z.d=1;
    mat SOL;
    SOL=exp(k-1,Z);
    printf("%lld",SOL.d%p);
    return 0;
}