Pagini recente » Cod sursa (job #3170962) | Cod sursa (job #76332) | Cod sursa (job #972070) | Cod sursa (job #2661841) | Cod sursa (job #2895290)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
void multiply(unsigned long long F[2][2], unsigned long long M[2][2], int MOD) {
unsigned long long a = ((F[0][0] * M[0][0])%MOD + (F[0][1] * M[1][0])%MOD)%MOD;
unsigned long long b= ((F[0][0] * M[0][1])%MOD + (F[0][1] * M[1][1])%MOD)%MOD;
unsigned long long c = ((F[1][0] * M[0][0])%MOD + (F[1][1] * M[1][0])%MOD)%MOD;
unsigned long long d = ((F[1][0] * M[0][1])%MOD + (F[1][1] * M[1][1])%MOD)%MOD;
F[0][0] = a;
F[0][1] = b;
F[1][0] = c;
F[1][1] = d;
}
void power(unsigned long long F[2][2], int n, int MOD) {
if (n == 0 || n == 1)
return;
unsigned long long M[2][2] = {{1,1},{1,0}};
power(F, n / 2, MOD);
multiply(F, F, MOD);
if (n % 2 != 0)
multiply(F, M, MOD);
}
unsigned long long fibo(int n, int MOD) {
unsigned long long F[2][2] = {{1,1},{1,0}};
if (n == 0)
return 0;
power(F, n - 1, MOD);
return F[0][0];
}
int main() {
unsigned long long n, k, p, s=0, MOD = 666013;
fin>>k;
fout<<fibo(k, MOD);
return 0;
}