Cod sursa(job #1083708)

Utilizator iarbaCrestez Paul iarba Data 16 ianuarie 2014 12:04:31
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#define con 666013
using namespace std;
long a[2][2],b[2][2],c[2][2],n;
int main()
{
	freopen("kfib.in","r",stdin);
	freopen("kfib.out","w",stdout);
	a[0][0]=0;a[0][1]=1;
	a[1][0]=1;a[1][1]=1;
	b[0][0]=1;b[0][1]=0;
	b[1][0]=0;b[1][1]=1;
	scanf("%ld",&n);n;
	while(n){
		if(n%2){
			c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
			c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1];
			c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
			c[0][0]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
			b[0][0]=c[0][0]%con;
			b[0][1]=c[0][1]%con;
			b[1][0]=c[1][0]%con;
			b[1][1]=c[1][1]%con;
			   }
		c[0][0]=a[0][0]*a[0][0]+a[0][1]*a[1][0];
		c[0][1]=a[0][0]*a[0][1]+a[0][1]*a[1][1];
		c[1][0]=a[1][0]*a[0][0]+a[1][1]*a[1][0];
		c[0][0]=a[1][0]*a[0][1]+a[1][1]*a[1][1];
		a[0][0]=c[0][0]%con;
		a[0][1]=c[0][1]%con;
		a[1][0]=c[1][0]%con;
		a[1][1]=c[1][1]%con;
		n/=2;
		}
	printf("%ld",(b[1][0]+b[1][1])%con);
return 0;
}