Cod sursa(job #1010892)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 15 octombrie 2013 21:10:00
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define M 666013
using namespace std;
int a,b;
struct matrice{ int a11, a12, a21, a22;};
ifstream in("kfib.in"); ofstream out("kfib.out");
inline matrice inmult( matrice A, matrice B){
    matrice Z;
    Z.a11=(((A.a11%M) * (B.a11%M))%M + ((A.a12)%M * (B.a21)%M)%M)%M;
    Z.a12=(((A.a11%M) * (B.a12%M))%M + ((A.a12)%M * (B.a22)%M)%M)%M;
    Z.a21=(((A.a21%M) * (B.a11%M))%M + ((A.a22)%M * (B.a21)%M)%M)%M;
    Z.a22=(((A.a21%M) * (B.a12%M))%M + ((A.a22)%M * (B.a22)%M)%M)%M;
    return Z;
}
matrice put(matrice a, int b){
    matrice p;
    p=(matrice){0,1,1,1};
    while(b){
        if(b&1) p=inmult(p,a);//p*=a;
        //a*=a;
        a=inmult(a,a);
        b/=2;
    }
    return p;
}
int main(){
    in>>b;
    matrice a;
    a=(matrice){0,1,1,1};
    b-=2;
    matrice R=put(a,b);
    out<<R.a22<<'\n';
    out.close();
    return 0;
}