Pagini recente » Cod sursa (job #2340114) | Voteaza Algorel | Cod sursa (job #3222391) | Cod sursa (job #2038831) | Cod sursa (job #2290836)
#include<fstream>
using namespace std;
ifstream in ("kfib.in");
ofstream out ("kfib.out");
int c[3][3],n;
const int mod = 666013;
int mat[3][3] = {{0,0,0},{0,1,1},{0,0,0}};
int aux[3][3] = {{0,0,0},{0,1,0},{0,0,1}};
int ini[3][3] = {{0,0,0},{0,0,1},{0,1,1}};
void inmultire (int a[3][3], int b[3][3]) {
for (int i = 1; i <= 2; i ++) {
for (int j = 1; j <= 2; j ++) {
c[i][j] = 0;
}
}
for (int i = 1; i <= 2; i ++) {
for (int j = 1; j <= 2; j ++) {
for (int k = 1; k <= 2; k ++) {
c[i][j] += (1LL* a[i][k] * b[k][j]) % mod;
}
}
}
for (int i = 1; i <= 2; i ++) {
for (int j = 1; j <= 2; j ++) {
a[i][j] = c[i][j] % mod;
}
}
}
void exponentiere (int n) {
if (n/2 > 0) {
exponentiere (n/2);
inmultire(aux,aux);
}
if (n % 2 == 1) {
inmultire (aux,ini);
}
}
int main (void) {
in >> n;
//ridicam aux la n-2
if (n > 2) {
exponentiere (n-2);
inmultire (mat,aux);
out << mat[1][2];
}
else {
if (n == 2 || n == 1) {
out << 1;
}
else {
out << 0;
}
}
return 0;
}