Pagini recente » Cod sursa (job #90670) | Cod sursa (job #722313) | Cod sursa (job #3178370) | Cod sursa (job #753513) | Cod sursa (job #2894480)
#include <cstdio>
#define MOD 666013
using namespace std;
struct fib{
int a[2][2];
};
fib mult(fib a, fib b){
fib c;
c.a[0][0] = (1LL * a.a[0][0] * b.a[0][0] + 1LL * a.a[0][1] * b.a[1][0]) % MOD;
c.a[0][1] = (1LL * a.a[0][0] * b.a[0][1] + 1LL * a.a[0][1] * b.a[1][1]) % MOD;
c.a[1][0] = (1LL * a.a[1][0] * b.a[0][0] + 1LL * a.a[1][1] * b.a[1][0]) % MOD;
c.a[1][1] = (1LL * a.a[1][0] * b.a[0][1] + 1LL * a.a[1][1] * b.a[1][1]) % MOD;
return c;
}
void fast_pow(int k){
fib a, b;
int p2;
a.a[0][0] = 0;
a.a[1][0] = a.a[1][1] = a.a[0][1] = 1;
b.a[0][0] = b.a[1][1] = 1;
b.a[0][1] = b.a[1][0] = 0;
for(p2 = 1;k > 0;p2<<=1){
if(k & p2){
k -= p2;
b = mult(b, a);
}
a = mult(a, a);
}
printf("%d", b.a[0][0]);
}
int main()
{
freopen("kfib.in", "r", stdin);
freopen("kfib.out", "w", stdout);
int k;
scanf("%d", &k);
fast_pow(k + 1);
return 0;
}