Pagini recente » Cod sursa (job #1859515) | Cod sursa (job #1853924) | Cod sursa (job #679433) | Cod sursa (job #3238544) | Cod sursa (job #2338489)
#include <iostream>
#include <fstream>
#define MOD 666013
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
///matr1 e ala in care se salveaza rez
void copiere(long long matr_finala[][100], long long matr[][100])
{
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
matr_finala[i][j]=matr[i][j];
}
}
}
void inm(long long matr1[][100], long long matr2[][100])
{
long long aux_matr1[100][100]= {0};
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
for(int k=0; k<2; k++)
{
aux_matr1[i][j]+=1ll * (matr1[i][k]*matr2[k][j]);
aux_matr1[i][j]%=MOD;
//cout<<i<<","<<j<<" = "<<i<<","<<k<<" + "<<k<<","<<j<<" <-> "<<aux_matr1[i][j]<<" = "<<matr1[i][k]<<" + "<<matr2[k][j]<<endl;
}
}
}
copiere(matr1,aux_matr1);
}
void ridicare(long long matr_N[][100],long long p)
{
p--;
long long matr_r[100][100];
copiere(matr_r,matr_N);
while(p!=0)
{
if(p%2==1)
{
inm(matr_r,matr_N);
}
inm(matr_N,matr_N);
p/=2;
}
copiere(matr_N,matr_r);
}
int main()
{
long long matr[100][100],index;
matr[0][0]=0,matr[0][1]=1,matr[1][0]=1,matr[1][1]=1;
f>>index;
ridicare(matr,index);
/*for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
cout<<matr[i][j]<<" ";
cout<<endl;
}*/
long long sir[10];
sir[0]=0;
sir[1]=1;
sir[2]=0;
sir[3]=0;
for(int i=2; i<4; i++)
{
for(int j=0; j<2; j++)
{
{
sir[i]+=1ll *(sir[j]*matr[j][i-2]);
sir[i]%=MOD;
}
}
}
g<<sir[2]<<endl;
return 0;
}