Cod sursa(job #3123169)

Utilizator biancalautaruBianca Lautaru biancalautaru Data 22 aprilie 2023 12:44:31
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define mod 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
long long n,c[2][2];
long long a[2][2]={1,1,1,0};
long long p[2][2]={1,0,0,1};

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

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

int main() {
    fin>>n;
    if (n<=2) {
        fout<<1;
        return 0;
    }
    n-=2;
    while (n!=0) {
        if (n%2!=0) {
            inmultire(c,p,a); /// c=p*a;
            copiere(p,c); /// p=c;
        }
        inmultire(c,a,a); /// c=a*a;
        copiere(a,c); /// a=c;
        n/=2;
    }
    fout<<(p[0][0]+p[0][1])%mod;
    return 0;
}