Cod sursa(job #2361709)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 2 martie 2019 18:05:12
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;

ofstream fo("kfib.out");
ifstream fi("kfib.in");

struct matrix
{
    long long a=0,b=0,c=0,d=0;
};

matrix operator *(matrix A,matrix B)
{
    matrix C;
    C.a=(A.a*B.a%666013+A.b*B.c%666013)%666013;
    C.b=(A.a*B.b%666013+A.b*B.d%666013)%666013;
    C.c=(A.c*B.a%666013+A.d*B.c%666013)%666013;
    C.d=(A.c*B.b%666013+A.d*B.d%666013)%666013;

    return C;
}

long long k;
matrix T,F;

matrix fact(matrix D,long long p)
{
    matrix I;
    I.a=1;
    I.d=1;

    for(long long i=1;i<=(1<<30);i*=2)
    {
        if(i&p)
            I=I*D;



        D=D*D;
    }

    return I;
}
int main()
{
   fi>>k;

   T.a=0;
   T.b=1;
   T.c=1;
   T.d=1;

   F.a=1;
   F.c=1;


   T=fact(T,k-1);
   T=T*F;

  fo<<T.a% 666013  ;

   fi.close();
   fo.close();
    return 0;
}