Cod sursa(job #609016)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 19 august 2011 01:44:07
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("kfib.in");
ofstream fout("kfib.out");

const int MOD=666013;
int M[3][3],K;

void mult(int A[3][3],int B[3][3], int C[3][3]) {
	int i,j,k;
	for(i=1;i<3;i++)
		for(j=1;j<3;j++)
			for(k=1;k<3;k++)
				C[i][j]=(C[i][j] + (long long) A[i][k] * B[k][j]) % MOD;
}

void explog(int M[3][3], int P) {
	int A[3][3], AUX[3][3];
	
	A[1][1]=0; A[1][2]=1;
	A[2][1]=1; A[2][2]=1;
	
	while(P) {
		if(P&1) {
			memset(AUX,0,sizeof(AUX));
			mult(M,A,AUX);
			memcpy(M,AUX,sizeof(AUX));
		}
		
		memset(AUX,0,sizeof(AUX));
		mult(A,A,AUX);
		memcpy(A,AUX,sizeof(AUX));
		
		P/=2;
	}
}

int main() {
	fin >> K;
	
	M[1][1]=0; M[1][2]=1;
	
	explog(M,K-1);
	
	fout << M[1][2];
}