Cod sursa(job #1776260)

Utilizator DarnAndrei Nedelcu Darn Data 11 octombrie 2016 08:48:57
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
int Z[2][2]={{0,1},{1,1}},M[2][2]={{0,1},{1,1}};
const int mod=666013;
void multiply (int a[][2], int b[][2])
{
    int i,j,k,c[2][2];
    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]+=(a[i][k]*b[k][j])%mod;
            c[i][j]%=mod;
        }
    for (int i=0;i<2;i++)
        for (int j=0;j<2;j++)
            M[i][j]=c[i][j];
}
 void put (int n)
 {
     if (n==1) return;
     if (n%2==0) {multiply(M,M); put(n/2); return;}
     else {multiply(M,Z); put(n-1); return;}
 }
int main()
{
    int k;
    in>>k;
    put(k-1);
    out<<M[1][1];
    return 0;
}