Pagini recente » Cod sursa (job #2716622) | Cod sursa (job #3244027) | Cod sursa (job #375334) | Cod sursa (job #2185371) | Cod sursa (job #2534286)
#include <fstream>
#include <cstring>
#define mod 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
long long int n,M[3][3],SOL[3][3];
void inmult(long long int A[][3],long long int B[0][3],long long int C[][3])
{
for (int i=0;i<=1;i++)
{
for (int j=0;j<=1;j++)
{
for (int k=0;k<=1;k++)
{
C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod;
}
}
}
}
void ridicare(int p){
long long int AUX[3][3],A[3][3];
memcpy(A,M,sizeof A);
SOL[1][1]=SOL[0][0]=1;
for (long long int i=0;(1<<i)<=p;i++)
{
if (p &(1<<i))
{
memset(AUX,0,sizeof AUX);
inmult(SOL,A,AUX);
memcpy(SOL,AUX,sizeof AUX);
}
memset(AUX,0,sizeof AUX);
inmult(A,A,AUX);
memcpy(A,AUX,sizeof AUX);
}
}
int main()
{
fin>>n;
M[0][0]=0;
M[0][1]=1;
M[1][0]=1;
M[1][1]=1;
ridicare(n-1);
fout<<SOL[1][1];
return 0;
}