Cod sursa(job #2419358)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 8 mai 2019 10:27:18
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
using namespace std;
const int MOD = 666013;
int p[3][3], a[3][3];
void prod_mat(int a[3][3], int b[3][3], int c[3][3])
{
    int i, j, k;
    for(i = 1 ; i <= 2 ; i ++)
        for(j = 1 ; j <= 2 ; j ++)
        {
            c[i][j] = 0;
            for(k = 1 ; k <= 2 ; k ++)
                c[i][j] = (c[i][j] + (a[i][k] * b[k][j]) % MOD) % MOD;
        }
}
void cpy(int a[3][3], int b[3][3])
{
    int i, j;
    for(i = 1 ; i <= 2 ; i ++)
        for(j = 1 ; j <= 2 ; j ++)
            a[i][j] = b[i][j];
}
void fast_pow(int k)
{
    int b[3][3];
    for( ; k ; k = (k >> 1))
    {
        if(k & 1)
        {
            cpy(b, p);
            prod_mat(a, b, p);
        }
        prod_mat(a, a, b);
        cpy(a, b);
    }
}
int main()
{
    freopen("kfib.in" , "r" , stdin);
    freopen("kfib.out" , "w" , stdout);
    int k;
    scanf("%d" , &k);
    p[1][1] = p[2][2] = a[1][1] = a[2][2] = a[1][2] = 1;
    fast_pow(k);
    printf("%d\n" , p[2][1]);
    return 0;
}