Pagini recente » Cod sursa (job #726359) | Cod sursa (job #2557189) | Cod sursa (job #2851053) | Cod sursa (job #1697098) | Cod sursa (job #2877668)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
#define MOD 666013
int k;
int a[2][2] = {{1, 1}, {1, 0}}, b[2][2], c[2][2];
static inline void Produs(int a[2][2], int b[2][2]) {
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
c[i][j] = 0;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
for(int k = 0; k < 2; k++)
c[i][j] += (1LL * a[i][k] * b[k][j]) % MOD;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
a[i][j] = c[i][j];
}
static inline void putere(int a[2][2], int y) {
int rez[2][2] = {{1, 0}, {0, 1}}; //matricea I2
while(y > 0) {
if(y % 2 == 1)
Produs(rez, a);
y >>= 1;
Produs(a, a);
}
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
a[i][j] = rez[i][j];
}
int main() {
fin >> k;
putere(a, k - 1);
b[0][0] = 1;
b[1][0] = 0;
Produs(a, b);
fout << a[0][0];
return 0;
}