Pagini recente » Cod sursa (job #3178497) | Cod sursa (job #1863474) | Cod sursa (job #2929961) | Cod sursa (job #2708203) | Cod sursa (job #2641662)
#include <fstream>
using namespace std;
const int MOD=666013;
unsigned long long int fibo[2]={1,1};
unsigned long long int fibo_copie[2]={1,1};
unsigned long long int mat_rez[4]={1,0,0,1};
unsigned long long int mat_a[4]={0,1,1,1};
unsigned long long int mat_rez_copie[4];
unsigned long long int mat_a_copie[4];
int main()
{
ifstream in("kfib.in");
ofstream out("kfib.out");
unsigned long long int k;
in>>k;
k=k-2;
while(k)
{
if(k%2)
{
mat_rez_copie[0]=mat_rez[0];
mat_rez_copie[1]=mat_rez[1];
mat_rez_copie[2]=mat_rez[2];
mat_rez_copie[3]=mat_rez[3];
mat_rez[0]=mat_rez_copie[0]*mat_a[0]+mat_rez_copie[1]*mat_a[2];
mat_rez[1]=mat_rez_copie[0]*mat_a[1]+mat_rez_copie[1]*mat_a[3];
mat_rez[2]=mat_rez_copie[2]*mat_a[0]+mat_rez_copie[3]*mat_a[2];
mat_rez[3]=mat_rez_copie[2]*mat_a[1]+mat_rez_copie[3]*mat_a[3];
}
mat_a_copie[0]=mat_a[0];
mat_a_copie[1]=mat_a[1];
mat_a_copie[2]=mat_a[2];
mat_a_copie[3]=mat_a[3];
mat_a[0]=mat_a_copie[0]*mat_a_copie[0]+mat_a_copie[1]*mat_a_copie[2];
mat_a[1]=mat_a_copie[0]*mat_a_copie[1]+mat_a_copie[1]*mat_a_copie[3];
mat_a[2]=mat_a_copie[2]*mat_a_copie[0]+mat_a_copie[3]*mat_a_copie[2];
mat_a[3]=mat_a_copie[2]*mat_a_copie[1]+mat_a_copie[3]*mat_a_copie[3];
k=k/2;
}
//out<<mat_rez[0]<<' '<<mat_rez[1]<<'\n'<<mat_rez[2]<<' '<<mat_rez[3]<<'\n';
fibo_copie[0]=fibo[0];
fibo_copie[1]=fibo[1];
fibo[0]=fibo_copie[0]*mat_rez[0]+fibo_copie[1]*mat_rez[2];
fibo[1]=fibo_copie[0]*mat_rez[1]+fibo_copie[1]*mat_rez[3];
out<<fibo[1]%MOD;
return 0;
}