Pagini recente » Cod sursa (job #1026410) | Cod sursa (job #2762647) | Cod sursa (job #1934410) | Cod sursa (job #2522521) | Cod sursa (job #2932726)
#include <fstream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
struct matr
{
int mat[3][3];
};
matr initial;
matr first;
matr id;
matr inmultire(matr ant, matr ct)
{
matr curent;
curent.mat[1][1]=ant.mat[1][1]*ct.mat[1][1]+ant.mat[1][2]*ct.mat[2][1];
curent.mat[1][2]=ant.mat[1][1]*ct.mat[1][2]+ant.mat[1][2]*ct.mat[2][2];
curent.mat[2][1]=ant.mat[2][1]*ct.mat[1][1]+ant.mat[2][2]*ct.mat[2][1];
curent.mat[2][2]=ant.mat[2][1]*ct.mat[2][1]+ant.mat[2][2]*ct.mat[2][2];
return curent;
}
matr lgput(matr x, int exp)
{
id.mat[1][1]=1;
id.mat[1][2]=0;
id.mat[2][1]=0;
id.mat[2][2]=1;
if(exp==0)
return id;
if(exp%2==1)
return inmultire(x,lgput(x,exp-1));
matr nou;
nou=lgput(x,exp/2);
return inmultire(nou,nou);
}
int main()
{
/*matr t1,t2;
t1=t2;
cout<<t1.mat<<' '<<t2.mat;*/
int k;
in>>k;
matr rez;
initial.mat[1][1]=0;
initial.mat[1][2]=1;
initial.mat[2][1]=1;
initial.mat[2][2]=1;
first.mat[1][1]=0;
first.mat[1][2]=1;
first.mat[2][1]=0;
first.mat[2][2]=0;
rez=inmultire(first,lgput(initial,k-1));
out<<rez.mat[1][2];
return 0;
}