Cod sursa(job #2378927)

Utilizator ewaldBerla Ewald ewald Data 12 martie 2019 19:06:07
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");

#define modulo 666013

struct fibo_mat{
    long long elems[3][3] = {{0,1},{1,1}};

    fibo_mat multiply( fibo_mat x, fibo_mat y ){
        fibo_mat z;
        z.elems[0][0] = (x.elems[0][0] * y.elems[0][0] + x.elems[0][1] * y.elems[1][0])%modulo;
        z.elems[0][1] = (x.elems[0][0] * y.elems[0][1] + x.elems[0][1] * y.elems[1][1])%modulo;
        z.elems[1][0] = (x.elems[1][0] * y.elems[0][0] + x.elems[1][1] * y.elems[1][0])%modulo;
        z.elems[1][1] = (x.elems[1][0] * y.elems[0][1] + x.elems[1][1] * y.elems[1][1])%modulo;
        return z;
    }

};

fibo_mat power(fibo_mat& m, long x ){
    fibo_mat r, m_cpy;
    while(x){
        if(x % 2 != 0)
            m = m.multiply(r,m);
     r = r.multiply(r,r);
     x/=2;
     }
     return r;
}

int main()
{
    fibo_mat m;
    long x;
    f>>x;
    power(m,x);
    g<<m.elems[0][0]%modulo;
}