Pagini recente » Cod sursa (job #2033935) | Cod sursa (job #2848237) | Cod sursa (job #2621667) | Cod sursa (job #1419702) | Cod sursa (job #924039)
Cod sursa(job #924039)
#include <fstream>
#define R9 666013
#define NM 10
using namespace std;
int i, j, k, n, m, a[NM][NM], b[NM][NM], c[NM][NM];
ifstream fin("kfib.in");
ofstream fout("kfib.out");
void inmultire(int a[NM][NM], int b[NM][NM], int c[NM][NM]) {
int i, j, k;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
c[i][j] = 0;
for (k = 0; k < n; k++)
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % R9;
}
}
void atribuire(int a[NM][NM], int b[NM][NM]) {
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
a[i][j] = b[i][j];
}
void afisare(int a[NM][NM]) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
fout << a[i][j] << " ";
fout << "\n";
}
fout << "\n";
}
int main() {
n = 2;
fin >> m;
fin.close();
m -= 2;
c[0][0] = c[1][1] = 1;
c[1][0] = c[0][1] = 0;
a[0][0] = 0;
a[0][1] = a[1][0] = a[1][1] = 1;
while (m) {
if (m % 2) {
inmultire(a, c, b);
atribuire(c, b);
}
inmultire(a, a, b);
atribuire(a, b);
m /= 2;
}
fout << (c[1][0] + c[1][1]) % R9;
return 0;
}