Cod sursa(job #2716285)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 4 martie 2021 22:35:31
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstring>
#define mod 666013
using namespace std;
long long sol[3][3];
long long z[3][3];
long long o[3][3];
long long n;

void copiere (long long a[3][3], long long b[3][3]) {
    for (long long i=1;i<=2;i++) {
        for (long long j=1;j<=2;j++) {
            a[i][j]=b[i][j];
        }
    }
}

void inmulteste (long long sol[3][3], long long a[3][3], long long b[3][3]) {
    for (long long i=1;i<=2;i++) {
        for (long long j=1;j<=2;j++) {
            sol[i][j]=0;
            for (long long k=1;k<=2;k++) {
                sol[i][j]+=a[i][k]*b[k][j];
                sol[i][j]%=mod;
            }
        }
    }
}

int main() {
    ifstream fin("kfib.in");
    ofstream fout("kfib.out");
    fin>>n;
    z[1][1]=0;
    z[1][2]=1;
    z[2][1]=1;
    z[2][2]=1;
   /// ridicareLaPutere(z,n);
    long long sol[3][3];
    long long aux[3][3];
    copiere(sol,z);
    n-=2;
    while (n) {
        if (n%2==1) {
            copiere(aux,sol);
            inmulteste(sol,aux,z);
        }
        copiere(aux,z);
        inmulteste(z,aux,aux);
        n/=2;
    }
    fout<<sol[2][2];
    return 0;
}