Pagini recente » Cod sursa (job #649203) | Cod sursa (job #380975) | Cod sursa (job #1131797) | Cod sursa (job #1926998) | Cod sursa (job #976272)
Cod sursa(job #976272)
#include<fstream>
#include<iostream>
using namespace std;
unsigned long a[3][3];
unsigned long p[3][3];
void inmultire(unsigned long p[3][3], unsigned long a[3][3])
{
unsigned long x[3][3];
x[0][0] = x[0][1] = x[0][2] = x[1][0] = x[2][0] = 0;
x[1][1] = p[1][1] * a[1][1] + p[1][2] * a[2][1];
x[1][2] = p[1][1] * a[1][2] + p[1][2] * a[2][2];
x[2][1] = p[2][1] * a[1][1] + p[2][2] * a[2][1];
x[2][2] = p[2][1] * a[1][2] + p[2][2] * a[2][2];
for(unsigned long i=0;i<=3;i++)
for(unsigned long j=0;j<=3;j++)
p[i][j] = x[i][j];
}
void putereLogaritmic(int n)
{
while(n>0)
{
if(n%2 == 1)
{
inmultire(p,a);
n--;
}
inmultire(a, a);
n/=2;
}
}
int main()
{
int k;
a[1][1] = 0;
a[1][2] = 1;
a[2][1] = 1;
a[2][2] = 1;
p[1][1] = 1;
p[1][2] = 0;
p[2][1] = 0;
p[2][2] = 1;
ifstream f("kfib.in");
ofstream g("kfib.out");
f>>k;
putereLogaritmic(k-1);
/*
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
cout<<p[i][j]<<" ";
cout<<endl;
}*/
g<<p[2][2];
}