Cod sursa(job #941169)
| Utilizator | Data | 18 aprilie 2013 05:13:26 | |
|---|---|---|---|
| Problema | Al k-lea termen Fibonacci | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.64 kb |
#include <fstream>
using namespace std;
const int mod = 666013;
long long prod[2][2];
void multiply(long long a[2][2], long long b[2][2])
{
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
prod[i][j] = (a[i][0]*b[0][j] + a[i][1]*b[1][j]) % mod;
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
a[i][j] = prod[i][j];
}
int main()
{
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int n;
fin >> n;
long long a[2][2] = {{1,0},{0,1}};
long long b[2][2] = {{0,1},{1,1}};
for (int i = 0; i < 30; ++i) {
if (1<<i & n)
multiply(a,b);
multiply(b,b);
}
fout << a[0][1];
return 0;
}
