Cod sursa(job #933845)

Utilizator visanrVisan Radu visanr Data 30 martie 2013 12:56:54
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

int N, Mat[2][2], A[2][2];

void Mult(int A[2][2], int B[2][2])
{
    int C[2][2], i, j, k;
    for(i = 0; i < 2; ++ i)
        for(j = 0; j < 2; ++ j)
        {
            long long Ans = 0;
            for(k = 0; k < 2; ++ k)
                Ans += 1LL * A[i][k] * B[k][j];
            C[i][j] = Ans % 666013;
        }
    for(i = 0; i < 2; ++ i)
        for(j = 0; j < 2; ++ j)
            A[i][j] = C[i][j];
}

int main()
{
    freopen("kfib.in", "r", stdin);
    freopen("kfib.out", "w", stdout);
    scanf("%i", &N);
    Mat[0][0] = Mat[0][1] = 1;
    A[0][1] = A[1][0] = A[1][1] = 1;
    N -= 2;
    while(N)
    {
        if(N % 2) Mult(Mat, A);
        Mult(A, A);
        N /= 2;
    }
    printf("%i\n", Mat[0][1]);
    return 0;
}