Cod sursa(job #1147645)

Utilizator SilverGSilver Gains SilverG Data 20 martie 2014 00:15:31
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
/*
    Keep It Simple!
*/

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

#include<cstdio>
#include<cstring>

#define MOD 666013

long long N,Z[3][3];

void Multiply(long long a[3][3], long long b[3][3])
{
	long long aux[3][3];
	memset(aux, 0, sizeof(aux));
	for (int i = 1; i <= 2; i++)
	for (int j = 1; j <= 2; j++)
	for (int k = 1; k <= 2; k++)
		aux[i][j] = (aux[i][j] + (a[i][k] * b[j][k])%MOD) % MOD;
	memcpy(a, aux,sizeof(aux));
}

void LgPow(int pow)
{
	long long sol[3][3];
	memcpy(sol, Z,sizeof(Z));

	while (pow)
	{
		if (pow % 2)
			Multiply(sol, Z);
		Multiply(Z, Z);
		pow /= 2;
	}
	memcpy(Z, sol, sizeof(Z));
}

int main()
{
	freopen("elmaj.in", "r", stdin);
	freopen("elmaj.out", "w", stdout);

	scanf("%lld", &N);
	Z[1][1] = 0; Z[1][2] = Z[2][1] = Z[2][2] = 1;

	LgPow(N - 2);
	
	printf("%lld", Z[2][2]);

	
}