Cod sursa(job #2828145)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 6 ianuarie 2022 22:05:06
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

#define int long long

using namespace std;

ifstream fin("kfib.in");
ofstream fout("kfib.out");

const int MOD = 666013;

int k;
int fibo[5][5];
int aux[5][5];
int matrix[5][5];

void inmultire(int ans[5][5], int aux[5][5])
{
    for(int i = 1; i <= 2; i ++)
    {
        for(int j = 1; j <= 2; j ++)
        {
            int suma = 0;
            for(int q = 1; q <= 2; q ++)
            {
                suma += ans[i][q] * aux[q][j];
                suma %= MOD;
            }
            matrix[i][j] = suma;
        }
    }
    for(int i = 1; i <= 2; i ++)
    {
        for(int j = 1; j <= 2; j ++)
        {
            ans[i][j] = matrix[i][j];
        }
    }
}

void lgput(int exp)
{
    for(int i = 1; i <= exp; i *= 2)
    {
        if(i & exp)
        {
            inmultire(fibo, aux);
        }
        inmultire(aux, aux);
    }
}

signed main()
{
    fin >> k;
    aux[1][1] = fibo[1][1] = 0;
    aux[1][2] = fibo[1][2] = 1;
    aux[2][1] = fibo[2][1] = 1;
    aux[2][2] = fibo[2][2] = 1;
    /// F0 = 0, F1 = 1
    lgput(k - 2);
    fout << fibo[2][2];
    return 0;
}