Pagini recente » Cod sursa (job #3157072) | Cod sursa (job #2207550) | Cod sursa (job #940074) | Cod sursa (job #2987780) | Cod sursa (job #1340740)
#include <iostream>
#include <fstream>
#include <cmath>
#define ll long long
#define mod 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
ll k;
struct Matrix {
ll a, b, c, d;
};
Matrix atribuie(ll a, ll b, ll c, ll d) {
Matrix A;
A.a = a;
A.b = b;
A.c = c;
A.d = d;
return A;
}
Matrix produs(Matrix A, Matrix B) {
return atribuie((A.a * B.a + A.b * B.c) % mod, (A.a * B.b + A.b * B.d) % mod, (A.c * B.a + A.d * B.c) % mod, (A.c * B.b + A.d * B.d) % mod);
}
Matrix power(Matrix A, ll p) {
if (p == 1)
return A;
Matrix half = power(A, p/2);
if (p % 2 == 0)
return produs(half, half);
else
return produs(produs(half, half), A);
}
int main() {
fin >> k;
fout << power(atribuie(0, 1, 1, 1), k-1).d << "\n";
fin.close();
fout.close();
return 0;
}