Pagini recente » Cod sursa (job #1635548) | Cod sursa (job #697967) | Cod sursa (job #1374124) | Cod sursa (job #1243514) | Cod sursa (job #1648083)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
void pow(int n, int &a11, int &a12, int &a21, int &a22)
{
if(n%2==0)
{
int b11=a11, b12=a12, b21=a21, b22=a22;
pow(n/2,b11,b12,b21,b22);
a11=b11*b11+b12*b21;
a12=b11*b12+b12*b22;
a21=b21*b11+b22*b21;
a22=b21*b12+b22*b22;
}
else if(n!=1 && n%2==1)
{
int b11=a11, b12=a12, b21=a21, b22=a22;
int c11, c12, c21, c22;
pow(n-1,b11,b12,b21,b22);
c11=a11*b11+a12*b21;
c12=a11*b12+a12*b22;
c21=a21*b11+a22*b21;
c22=a21*b12+a22*b22;
a11=c11; a12=c12; a21=c21; a22=c22;
}
}
int main()
{
int n, a11=0, a12=1, a21=1, a22=1; f>>n;
if(n==1||n==2) g<<1;
else
{
pow(n-2,a11,a12,a21,a22);
g<<a12+a22;
}
return 0;
}