Cod sursa(job #1470582)

Utilizator starduststardust stardust Data 11 august 2015 17:44:35
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>
#include <string.h>
#define dim 2 
#define modulo 666013

int C[2][2] = {1, 0, 0, 1};
int A[2][2] = {0, 1, 1, 1};

void mul(int A[dim][dim], int B[dim][dim])
{
	int C[dim][dim] = {0};
	for (int i = 0 ; i < 2 ; i++)
		for (int j = 0 ; j < 2 ; ++j)
		{
			int tmp = 0;

			for (int k = 0 ; k < 2 ; k++)
				tmp = (tmp + 1LL * A[i][k] * B[k][j]) % modulo;

			C[i][j] = tmp % modulo;
		}

	memcpy(A, C, 4 * sizeof(int));
}

void power(int k)
{
	for (int i = 0; (1 << i) <= k; i++)
	{
		if (k & (1 << i))
			mul(C, A);

		mul(A, A);
	}
}

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

	scanf("%d", &k);
	power(k - 1);

	printf("%d", C[1][1] % modulo);
}