Pagini recente » Cod sursa (job #1867124) | Cod sursa (job #472344) | Istoria paginii utilizator/indianu | Cod sursa (job #811431) | Cod sursa (job #497679)
Cod sursa(job #497679)
#include <iostream>
#include <conio.h>
using namespace std;
const long modulo = 666013;
void setZero(long long int mat[2][2]){
for (int i=0;i<2;i++)
for (int j=0;j<2;j++)
mat[i][j] = 0 ;
}
void copy(long long int dest[2][2], long long src[2][2]){
for (int i=0;i<2;i++)
for (int j=0;j<2;j++)
dest[i][j] = src[i][j] ;
}
void multMat22(long long mat1[2][2], long long mat2[2][2] ){
long long aux[2][2];
setZero(aux);
for (int i=0;i<2;i++)
for (int j=0;j<2;j++)
for (int k=0;k<2;k++)
aux[i][j] = ( aux[i][j] + (mat1[i][k] * mat2[k][j]) % modulo ) %modulo;
copy(mat1, aux);
}
void matPow(long long mat[2][2],long long n){
if (n <= 1) return;
else{
if ( n % 2 == 0 ){
matPow(mat, n/2);
multMat22(mat,mat);
return ;
}
else {
long long aux[2][2];
copy(aux, mat);
matPow(mat, (n - 1)/2);
multMat22(mat,mat);
multMat22(mat,aux);
return ;
}
}
}
int main(){
long long k;
cin >> k;
long long z[2][2] = { {0,1}, {1,1}};
matPow(z, k-1);
cout << z[1][1] << endl;
return 0;
}