Cod sursa(job #491380)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 11 octombrie 2010 08:17:51
Problema Al k-lea termen Fibonacci Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

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

long long x[3][3],rez[3][3],y[3][3],n;

void inmultire(long long a[3][3],long long b[3][3]){
	long long c[3][3];
	c[1][1]=(a[1][1]*b[1][1]%666013 + a[1][2]*b[2][1]%666013)%666013;
	c[1][2]=(a[1][1]*b[1][2]%666013 + a[1][2]*b[2][2]%666013)%666013;
	c[2][1]=(a[2][1]*b[1][1]%666013 + a[2][2]*b[2][1]%666013)%666013;
	c[2][2]=(a[2][1]*b[1][2]%666013 + a[2][2]*b[2][2]%666013)%666013;
	a[1][1]=c[1][1];
	a[1][2]=c[1][2];
	a[2][1]=c[2][1];
	a[2][2]=c[2][2];
}

void prelucrare(){
	x[1][1]=1;
	x[1][2]=1;
	x[2][1]=1;
	x[2][2]=0;
	rez[1][1]=1;
	rez[1][2]=0;
	rez[2][1]=0;
	rez[2][2]=1;
	while(n!=0){
		if(n%2!=0){
			inmultire(rez,x);
		}
		inmultire(x,x);
		n=n/2;
	}
	out<<rez[1][1]+rez[1][2];
}


int main(){
	in>>n;
	n=n-2;
	prelucrare();
	return 0;
}