Cod sursa(job #982092)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 8 august 2013 14:47:08
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <cstring>

#define In "kfib.in"
#define Out "kfib.out"
#define MOD 666013

using namespace std;
int K,sol[3][3],Z[3][3];

inline void Read()
{
    ifstream f(In);
    f>>K;
    f.close();
}

inline void Inm(int c[3][3],int a[3][3],int b[3][3])
{
    memset(c,0,sizeof(c));
    int i, j, k;
    for(i = 0 ;i < 2 ; ++i)
        for(j = 0 ; j < 2 ; ++j)
        {
            c[i][j] = 0;
            for(k = 0; k < 2;  ++k)
                c[i][j] = (c[i][j]+1LL*a[i][k]*b[k][j])%MOD;
        }
}

inline void PowLog(int k)
{
    int aux[3][3];
    while(k)
    {
        if(k&1)
        {
            Inm(aux,sol,Z);
            memcpy(sol,aux,sizeof(aux));
            --k;
        }
        k>>=1;
        Inm(aux,Z,Z);
        memcpy(Z,aux,sizeof(aux));
    }
}

inline void Solve()
{
    Z[0][1] = Z[1][0] = Z[1][1] = 1;
    sol[0][0] = sol[1][1] = 1;
    PowLog(K-1);
}

inline void Write()
{
    ofstream g(Out);
    g<<sol[1][1]<<"\n";
    g.close();
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}