Cod sursa(job #854829)

Utilizator vladm97Matei Vlad vladm97 Data 14 ianuarie 2013 09:46:53
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#define nr 666013
using namespace std;
int n[3][3],rez[3][3];
void initn(){
	n[0][0]=0;
	n[0][1]=n[1][0]=n[1][1]=1;
}

void initrez(){
	rez[0][0]=rez[1][1]=1;
	rez[0][1]=rez[1][0]=0;
}
void inmrez(){
	int i,j,c[2][2],k;
	for(i=0;i<=1;i++)
		 for(j=0;j<=1;j++)
			 {
			  c[i][j]=0;
			  for(k=0;k<=1;k++)
			  {c[i][j]=(c[i][j]+n[i][k]*rez[k][j])%nr;
				}
     }
for(i=0;i<=1;i++)
		 for(j=0;j<=1;j++)
			 rez[i][j]=c[i][j];
}
void inmn(){
	int i,j,c[2][2],k;
	for(i=0;i<=1;i++)
		 for(j=0;j<=1;j++)
			 {
			  c[i][j]=0;
			  for(k=0;k<=1;k++)
			  {c[i][j]=(c[i][j]+n[i][k]*n[k][j])%nr;
				}
     }
for(i=0;i<=1;i++)
		 for(j=0;j<=1;j++)
			 n[i][j]=c[i][j];
}
int main(){
	ifstream f("kfib.in");
	ofstream g("kfib.out");
	int k,i;
	f>>k;
	initn();
	initrez();
	for(i=0;(1<<i)<=k;i++)
{if(((1<<i)&k)!=0)inmrez();
inmn();
}
g<<rez[1][0];
}