Pagini recente » Cod sursa (job #3265914) | Cod sursa (job #3208164) | Clasamentul arhivei de probleme | Cod sursa (job #94106) | Cod sursa (job #726606)
Cod sursa(job #726606)
#include <fstream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
const int MOD = 666013;
const int N = 2;
int n;
long long m[N][N];
long long p[N][N];
void multiply(long long a[N][N], long long b[N][N]) {
long long c[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j) {
c[i][j] = 0;
for (int k = 0; k < N; ++k)
c[i][j] = (c[i][j] + (a[i][k] * b[k][j])) % MOD;
}
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
a[i][j] = c[i][j];
}
void raise() {
while (n) {
if (n&1)
multiply(p, m);
multiply(m, m);
n /= 2;
}
}
int main() {
in >> n;
p[0][0] = p[1][1] = 1;
m[0][1] = m[1][0] = m[1][1] = 1;
raise();
out << p[0][1]/* + p[1][1] */<< "\n";
return 0;
}