Cod sursa(job #2148352)

Utilizator tanasaradutanasaradu tanasaradu Data 1 martie 2018 17:56:48
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
const int Mod = 666013;
const short var = 3;
int a[var][var], v[var][var], n;
inline void Inmult(int a[var][var], int b[var][var])
{
    int c[var][var];
    for(int i = 1 ; i <= var - 1 ; i++)
        for(int j = 1 ; j <= var - 1 ; j++)
        {
            int sum = 0;
            for(int k = 1 ; k <= var - 1; k++)
                sum = (sum + 1LL * a[i][k] * b[j][k]) % Mod;
            c[i][j] = sum;
        }
    for(int i = 1 ; i <= var - 1 ; i++)
        for(int j = 1 ; j <= var - 1 ; j++)
            a[i][j] = c[i][j];
}
inline void Lgput(int n)
{
    int u[var][var];
    u[1][1] = u[2][2] = 1;
    u[1][2] = u[2][1] = 0;
    while(n > 0)
    {
        if(n & 1)
            Inmult(u , v);
        n /= 2;
        Inmult(v, v);
    }
    for(int i = 1 ; i <= var - 1 ; i++)
        for(int j = 1 ; j <= var - 1 ; j++)
            v[i][j] = u[i][j];
}
int main()
{
    fin >> n;
    v[1][2] = 1;
    v[2][1] = v[2][2] = 1;
    a[1][2] = 1;
    Lgput(n - 1);
    Inmult(a, v);
    fout << a[1][2] << "\n";
    fin.close();
    fout.close();
    return 0;
}