Cod sursa(job #442805)

Utilizator S7012MYPetru Trimbitas S7012MY Data 15 aprilie 2010 12:48:20
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <cstring>

int n,a[3][3],b[3][3],c[3][3],f[2];

void inmultire() {
	int i,j,k;
	for(i=1; i<=2; i++)
		for(j=1; j<=2; j++) {
			c[i][j]=0;
			for(k=1; k<=2;k++)
				c[i][j]+=a[i][k]*b[k][j];
		}
}

void putere(int n) {
	int i;
	if(n<=1) {
		memcpy(c,a,sizeof(a));
		return;
	}
	memcpy(b,a,sizeof(a));
	inmultire();
	if(n==2) return;
	for(i=2; i<=n; i++) {
		memcpy(a,c,sizeof(c));
		inmultire();
	}
}

int main()
{
	FILE *ff=fopen("kfib.in","r");
	FILE *g=fopen("kfib.out","w");
	int rez[2]={0,0};
	f[0]=0;
	f[1]=1;
	a[1][1]=0;
	a[1][2]=1;
	a[2][2]=1;
	a[2][1]=1;
	fscanf(ff,"%d",&n);
	putere(n);
	/*for(int i=1; i<=2; i++) {
		for(int j=1; j<=2; j++) printf("%d ",a[i][j]);
		printf("\n");
	}*/
	rez[0]=c[0][0]*f[0]+c[1][0]*f[1];
	rez[1]=c[0][1]*f[0]+c[1][1]*f[1];
	fprintf(g,"%d",rez[1]);
	return 0;
}