Pagini recente » Cod sursa (job #1632458) | Cod sursa (job #2611967) | Cod sursa (job #176203) | Cod sursa (job #1327417) | Cod sursa (job #2340461)
#include <iostream>
#include <cstdio>
#define MOD 666013
using namespace std;
struct matrice
{
long long a[2][2];
void add(matrice b)
{
long long aux[2][2] = {{0, 0}, {0, 0}};
for(int i = 0; i<2; i++)
{
aux[0][0] = (aux[0][0] + (a[i][0] * b.a[0][i])%MOD)%MOD;
aux[1][0] = (aux[1][0] + (a[i][1] * b.a[0][i])%MOD)%MOD;
aux[0][1] = (aux[0][1] + (a[i][0] * b.a[1][i])%MOD)%MOD;
aux[1][1] = (aux[1][1] + (a[i][1] * b.a[1][i])%MOD)%MOD;
}
a[0][0] = aux[0][0];
a[0][1] = aux[0][1];
a[1][0] = aux[1][0];
a[1][1] = aux[1][1];
}
};
matrice m;
matrice r;
void ridLaPutLog(int put)
{
r.a[0][0] = 1;
r.a[0][1] = 0;
r.a[1][0] = 0;
r.a[1][1] = 1;
while(put)
{
if((put & 1))
{
put--;
r.add(m);
}
else
{
put/=2;
m.add(m);
}
}
}
long long nr;
void rez()
{
m.a[0][0] = 0;
m.a[0][1] = 1;
m.a[1][0] = 1;
m.a[1][1] = 1;
scanf("%lld", &nr);
ridLaPutLog(nr-2);
printf("%lld", r.a[0][1]+r.a[1][1]);
}
int main()
{
freopen("kfib.in", "r", stdin);
freopen("kfib.out", "w", stdout);
rez();
return 0;
}