Cod sursa(job #804630)

Utilizator blechereyalBlecher Eyal blechereyal Data 29 octombrie 2012 23:50:10
Problema Al k-lea termen Fibonacci Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#define md 666013
#include <fstream>

using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");

 
void matricein(long long a[2][2],long long b[2][2])
{int i,j,k;
long c[2][2]={{0,0},{0,0}};

for(i=0;i<2;i++)
  for(j=0;j<2;j++)
    for(k=0;k<2;k++)
      c[i][j]=c[i][j]+((a[i][k]*b[k][j])%md)%md;

for(i=0;i<2;i++)
      for(j=0;j<2;j++)
         a[i][j]=c[i][j];                  
}

void power(long long x[2][2],long n)
{ 
long long rez[2][2]={{1,0},{0,1}};

while (n)
	{
	if (n & 1)
		{
		matricein(rez,x);//rez =rez*x;
		n--;
		}
		matricein(x,x);//x =x*x;
		n >>=1 ;
	}
	
int i,j;
for(i=0;i<2;i++)
      for(j=0;j<2;j++)
         x[i][j]=rez[i][j];   
}

int main()
{long long b[2][2]={{0,1},{1,1}};
long n;
f>>n;
power(b,n);
g<<b[0][1]; 

return 0;     
}