Cod sursa(job #884015)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 20 februarie 2013 16:42:51
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb

#include<fstream>
#define mod 666013


using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");
int r[3][3],I[3][3],R[3][3];
int n;
void copy  (int C[3][3]){
   int i,j;
    for(i=1;i<=2;++i){
        for(j=1;j<=2;++j){

            C[i][j]=r[i][j];
        }
    }
}
void mult (int C[3][3],int B[3][3]) {
int i,j,k;
    for(i=1;i<=2;++i){

        for(k=1;k<=2;++k) {
            r[i][k]=0;

            for(j=1;j<=2;++j){

                    r[i][k]=r[i][k]+(C[i][j]*B[j][k])%mod ;

            }
             r[i][k]%=mod;
        }
    }
    copy(C);
}
void lg(int P[3][3],int A[3][3],int put){


    while( put ) {

        if(put%2==1){
            mult(P,A);
        }
        mult(A,A);
        put>>=1;
    }
}
int main () {

    f>>n;

    I[1][1]=I[2][2]=1;
    R[2][1]=R[1][2]=R[2][2]=1;
    lg(I,R,n-1);
    g<<(I[2][2])%mod;
    return 0;
}