Cod sursa(job #641188)

Utilizator ELHoriaHoria Cretescu ELHoria Data 27 noiembrie 2011 15:23:11
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <cstdlib>

using namespace std;

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

const int MOD = 666013;

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

int fibo(int p)
{
	int D[2][2] , aux[2][2] , sol[2][2];
	D[0][0] = D[0][1] = D[1][0] = 1; D[1][1] = 0;
	memcpy(sol,D,sizeof(D));
	for(;p;p>>=1)
	{
		if(p & 1) { p--;
				memset(aux,0,sizeof(aux));
				mult(sol,D,aux);
				memcpy(sol,aux,sizeof(aux));
		}
		memset(aux,0,sizeof(aux));
		mult(D,D,aux);
		memcpy(D,aux,sizeof(aux));
	}
	return sol[1][0];
}

int main()
{
	int N;
	fin>>N;
	fout<<fibo(N-1)<<'\n';
	return 0;
}