Cod sursa(job #3325600)

Utilizator geeedavid susu geee Data 25 noiembrie 2025 19:57:54
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
using namespace std;

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

const int MD = 666013;

int M[2][2], R[2][2], T[2][2];

void mm(int A[2][2], int B[2][2], int C[2][2]) {
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            C[i][j] = 0;

    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            for (int k = 0; k < 2; k++)
                C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % MD;
}

int main() {
    int k;
    fin >> k;
    M[0][0] = 1; M[0][1] = 1;
    M[1][0] = 1; M[1][1] = 0;
    R[0][0] = 1; R[0][1] = 0;
    R[1][0] = 0; R[1][1] = 1;
    k -= 2;
    while (k > 1) {
        if (k % 2 == 0) {
            mm(M, M, T);
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    M[i][j] = T[i][j];
            k /= 2;
        } else {
            mm(R, M, T);
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    R[i][j] = T[i][j];
            k--;
        }
    }
    mm(M, R, T);
    fout << (T[0][0] + T[0][1]) % MD;
    return 0;
}