Cod sursa(job #1562591)

Utilizator Mihai7Gheoace Mihai Mihai7 Data 5 ianuarie 2016 12:28:32
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
using namespace std;
#define type long long
#define mod 666013
type A[2][2],S[2][2],C[2][2],i,j,q;
FILE *f=freopen("kfib.in","r",stdin),*g=freopen("kfib.out","w",stdout);int k;
void lgput(int k)
{//initialise
	A[0][1]=A[1][0]=A[1][1]=S[1][1]=S[0][0]=1;
	if(!k)printf("%lld",S[0][0]);
	else {
for(;k;k>>=1)
	{if(1&k)	
		{for(i=0;i<2;++i)
			for(j=0;j<2;++j)
				{C[i][j]=0;
				for(q=0;q<2;++q)
					C[i][j]=(C[i][j]+S[i][q]*A[q][j])%mod;
				}
		for(i=0;i<2;++i)
			for(j=0;j<2;++j)
				S[i][j]=C[i][j];
		}
	for(i=0;i<2;++i)
		for(j=0;j<2;++j)
			{C[i][j]=0;
			for(q=0;q<2;++q)
				C[i][j]=(C[i][j]+A[i][q]*A[q][j])%mod;
			}
	for(i=0;i<2;++i)
		for(j=0;j<2;++j)
			A[i][j]=C[i][j];
	}
printf("%lld",S[0][1]);
	}
}
int main()
{
scanf("%d",&k);
lgput(k);
}