Pagini recente » Cod sursa (job #651139) | Cod sursa (job #955108) | Cod sursa (job #324269) | Cod sursa (job #716578) | Cod sursa (job #2985636)
#include <fstream>
using namespace std;
#define MOD 666013
void inmult_matr_2x2(long long A[2][2],long long B[2][2],long long C[2][2])
{
C[0][0]=(A[0][0]%MOD*B[0][0]%MOD+A[0][1]%MOD*B[1][0]%MOD)%MOD;
C[0][1]=(A[0][0]%MOD*B[0][1]%MOD+A[0][1]%MOD*B[1][1]%MOD)%MOD;
C[1][0]=(A[1][0]%MOD*B[0][0]%MOD+A[1][1]%MOD*B[1][0]%MOD)%MOD;
C[1][1]=(A[1][0]%MOD*B[0][1]%MOD+A[1][1]%MOD*B[1][1]%MOD)%MOD;
}
void set_matr(long long A[2][2],long long B[2][2])
{
A[0][0]=B[0][0];
A[0][1]=B[0][1];
A[1][0]=B[1][0];
A[1][1]=B[1][1];
}
int main()
{
ifstream f("kfib.in");
ofstream g("kfib.out");
long long k;
long long Z[2][2]={{0,1},{1,1}},R[2][2]={{1,0},{0,1}};
long long temp[2][2];
f>>k;
k--;
while(k!=0)
{
int u=k%2;
if(u==1)
{
inmult_matr_2x2(R,Z,temp);
set_matr(R,temp);
}
inmult_matr_2x2(Z,Z,temp);
set_matr(Z,temp);
k/=2;
}
g<<R[1][1];
return 0;
}