Cod sursa(job #380563)

Utilizator ooctavTuchila Octavian ooctav Data 6 ianuarie 2010 17:45:26
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#define MOD 666013
int K;
int A[3][3],PU[3][3],FCT[3][3];

void calcp();
void inmulteste(int E[3][3],int F[3][3]);
void valori();


int main()
{

	freopen("kfib.in","r",stdin);
	freopen("kfib.out","w",stdout);
	scanf("%d",&K);
	valori();
	calcp();
	inmulteste(PU,FCT);
	printf("%d",PU[1][1]);
	
	return 0;
}

void calcp()
{
	while(K>1)
	{
		if(K%2)
			inmulteste(PU,A);
		inmulteste(A,A);
		K=K/2;
	}
}

void inmulteste(int E[3][3],int F[3][3])
{
	int T[3][3];
	T[1][1]=0,T[1][2]=0,T[2][1]=0,T[2][2]=0;

	for(int l=1;l<=2;l++)
		for(int i=1;i<=2;i++)
			for(int j=1;j<=2;j++)
				T[i][j]+=(E[i][l]*F[l][j])%MOD;
	for(int i=1;i<=2;i++)
		for(int j=1;j<=2;j++)
			E[i][j]=T[i][j];
}

void valori()
{
	PU[1][1]=1;PU[1][2]=1;PU[2][1]=1;PU[2][2]=1;
	FCT[1][1]=1;
}