Cod sursa(job #1680667)

Utilizator stud.ubbstud ubb stud.ubb Data 8 aprilie 2016 22:41:52
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>

using namespace std;
struct MatricePatratica{
long long ss, sj, ds, dj;
};

struct MatriceLiniara{
long long st, dr;
};
MatricePatratica ProdusMatricePatratica(MatricePatratica A, MatricePatratica B){
    MatricePatratica C;
C.ss=(A.ss*B.ss+A.ds*B.sj)%666013;
C.ds=(A.ss*B.ds+A.ds*B.dj)%666013;
C.sj=(A.sj*B.ss+A.dj*B.sj)%666013;
C.dj=(A.sj*B.ds+A.dj*B.dj)%666013;
return C;
}

MatricePatratica RP (MatricePatratica A, int n){
if(n==1)
    return A;
else{
    MatricePatratica mp=RP(A,n/2);
    if(n%2==0)
        return ProdusMatricePatratica(mp, mp);
    else
        return ProdusMatricePatratica(ProdusMatricePatratica(mp, mp), A);
}
}
int main()
{
    MatriceLiniara Z;
    Z.st=0;
    Z.dr=1;
    MatricePatratica A;

    cin>>A.ss>>A.ds>>A.sj>>A.dj;
    cout<<"Dati n: ";
    long long n;
    cin>>n;

    A=RP(A, n-1);

    cout<<A.ss<<" "<<A.ds<<"\n"<<A.sj<<" "<<A.dj<<endl;
    MatriceLiniara X;
    X.st=Z.st*A.ss+Z.dr*A.sj;
    X.dr=(Z.st*A.ds+Z.dr*A.dj)%666013;
    cout<<X.dr;
    return 0;
}