Cod sursa(job #3298642)

Utilizator Andronie_RazvanAndronie Razvan Andronie_Razvan Data 31 mai 2025 19:51:09
Problema Al k-lea termen Fibonacci Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#define mod 666013

typedef struct {
    int m[2][2];
}matrice;

matrice inmultire(matrice A, matrice B)
{
    matrice C;
    C.m[0][0]=(1LL*A.m[0][0]*B.m[0][0]+1LL*A.m[0][1]*B.m[1][0])%mod;
    C.m[0][1]=(1LL*A.m[0][0]*B.m[0][1]+1LL*A.m[0][1]*B.m[1][1])%mod;
    C.m[1][0]=(1LL*A.m[1][0]*B.m[0][0]+1LL*A.m[1][1]*B.m[1][0])%mod;
    C.m[1][1]=(1LL*A.m[1][0]*B.m[0][1]+1LL*A.m[1][1]*B.m[1][1])%mod;
    return C;
}


//ridicarea la putere in timp logaritmic pentru matrici

matrice power(matrice A, int p)
{ 
    matrice sol = {{{1, 0}, {0, 1}}};
    while(p>0)
    {
        if(p%2==1)
        sol=inmultire(sol,A);
        A=inmultire(A,A);
        p=p/2;
    }
    return sol;
}

int main(void)
{
    FILE *f1=NULL, *f2=NULL;
    f1=fopen("kfib.in","r");
    f2=fopen("kfib.out","w");
    int k;
    fscanf(f1,"%d", &k);
    fclose(f1);

    if (k==0)
    {
        fprintf(f2,"0\n");
    }

    matrice Z={{{1, 1}, {1, 0}}};
    matrice rezultat=power(Z,k-1);
    fprintf(f2,"%d\n", rezultat.m[0][0]);
    fclose(f2);

    return 0;
}