Cod sursa(job #631627)

Utilizator sebii_cSebastian Claici sebii_c Data 9 noiembrie 2011 01:35:13
Problema Al k-lea termen Fibonacci Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
#include <stdio.h>
#include <string.h>
#define MOD 666013  

void matrix_mult(int (*A)[2], int (*B)[2])
{
    int C[2][2];
    memset(C, 0, sizeof(C));
    
    int i, j, k;
    for (i=0; i<2; ++i)
	for (j=0; j<2; ++j)
	    for (k=0; k<2; ++k)
		C[i][j] += (1ll*A[i][k]*B[k][j])%MOD;
    
    memcpy(A, C, sizeof(C));
}

int main()
{
    int n;
    int T[2][2] = {{1, 1}, {1, 0}};
    int res[2][2] = {{1, 0}, {0, 1}};
    scanf("%d", &n);
    n -= 1;
    
    while (n) {
	if (n%2)
	    matrix_mult(res, T);
	matrix_mult(T, T);
	n >>= 1;
    }

    printf("%d\n", res[0][0]);
    return 0;
}