Cod sursa(job #1156945)

Utilizator DanutsDanut Rusu Danuts Data 28 martie 2014 09:53:13
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#define MOD 666013
using namespace std;
int A[3][3],B[2][3];
FILE *f=fopen("kfib.in","r");
FILE *g=fopen("kfib.out","w");
int k;
void inmultire(int A[3][3],int B[2][3]){
	int aux=0,C[2][3];
	for(int i=1;i<=1;i++){
		for(int j=1;j<=2;j++){
			aux=0;
			for(int kk=1;kk<=2;kk++)
				aux+=B[i][kk]*A[kk][j];
			C[i][j]=aux;
		}
	}
	for(int i=1;i<=2;i++)
		B[1][i]=C[1][i];
}
void inmultire2(int X[3][3],int B[3][3]){
	int aux=0,C[3][3];
	for(int i=1;i<=2;i++){
		for(int j=1;j<=2;j++){
			aux=0;
			for(int kk=1;kk<=2;kk++)
				aux+=B[i][kk]*X[kk][j];
			C[i][j]=aux;
		}
	}
	for(int i=1;i<=2;i++)
		for(int j=1;j<=2;j++)
			B[i][j]=C[i][j];
}
int main (){
	fscanf(f,"%d",&k);
	A[1][1]=0,A[1][2]=1,A[2][1]=1,A[2][2]=1;
	B[1][1]=0,B[1][2]=1;

	
	for(k;k>0;k/=2){
		if(k%2!=0)
			inmultire(A,B);
		inmultire2(A,A);
	}
	//for(int i=1;i<=2;i++)
	fprintf(g,"%d ",B[1][1]%MOD);
	return 0;
}