Cod sursa(job #3030633)

Utilizator indianu_talpa_iuteTisca Catalin indianu_talpa_iute Data 17 martie 2023 19:26:41
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
#define SZ 2
#define MOD 666013

using namespace std;

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

int mat[SZ][SZ] = {
        {0, 1},
        {1, 1}
};

int n, sol[SZ][SZ];

void mult(int a[SZ][SZ], int b[SZ][SZ]) {
    int c[SZ][SZ];
    memset(c, 0, sizeof(c));
    for (int i = 0; i < SZ; i++)
        for (int j = 0; j < SZ; j++)
            for (int k = 0; k < SZ; k++)
                c[i][j] = (c[i][j] + (int) ((1LL * a[i][k] * b[k][j]) % MOD)) % MOD;
    memcpy(a, c, sizeof(c));
}

// more like sol * mat ^ n
void grrPow(int n) {
    while (n) {
        if (n % 2 == 1)
            mult(sol, mat);
        mult(mat, mat);
        n /= 2;
    }
}

int main() {
    fin >> n;
    sol[1][0] = 0;
    sol[1][1] = 1;
    grrPow(n - 1);
    fout << sol[1][1];
    return 0;
}