Pagini recente » Cod sursa (job #2897604) | Cod sursa (job #1961959) | Cod sursa (job #2982502) | Cod sursa (job #338407) | Cod sursa (job #2931251)
#include <bits/stdc++.h>
#define N 50005
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
int n;
void multiply(int a[2][2], int b[2][2], int c[2][2]) {
for(int k = 0;k < 2;++k) {
for(int i = 0;i < 2;++i) {
for(int j = 0;j < n;++j) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
void copy(int a[2][2], int b[2][2]) {
for(int i = 0;i < 2;++i) {
for(int j = 0;j < 2;++j) {
b[i][j] = a[i][j];
}
}
}
void solve(int n) {
int rez[2][2] = {{1, 1}, {0, 0}};
int use[2][2] = {{0, 1}, {1, 1}};
int temp[2][2];
int log[2][2] = {{1, 0}, {0, 1}};
for(int i = 1;(1 << i) <= n;++i) {
if((1 << i) & n) {
memset(temp, 0, sizeof(temp));
multiply(log, use, temp);
copy(temp, log);
}
memset(temp, 0, sizeof(temp));
multiply(use, use, temp);
copy(temp, use);
}
memset(temp, 0, sizeof(temp));
multiply(rez, log, temp);
g<<temp[0][1]<<'\n';
}
int main() {
f>>n;
solve(n - 2);
return 0;
}