Pagini recente » Cod sursa (job #2608091) | Cod sursa (job #2968463) | Cod sursa (job #2517564) | Cod sursa (job #1456093) | Cod sursa (job #1680672)
#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;
A.ss=0;
A.ds=1;
A.sj=1;
A.dj=1;
//out<<"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;
}