Cod sursa(job #2932726)

Utilizator velciu_ilincavelciu ilinca velciu_ilinca Data 3 noiembrie 2022 19:38:16
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
struct matr
{
    int mat[3][3];
};
matr initial;
matr first;
matr id;
matr inmultire(matr ant, matr ct)
{
    matr curent;
    curent.mat[1][1]=ant.mat[1][1]*ct.mat[1][1]+ant.mat[1][2]*ct.mat[2][1];
    curent.mat[1][2]=ant.mat[1][1]*ct.mat[1][2]+ant.mat[1][2]*ct.mat[2][2];
    curent.mat[2][1]=ant.mat[2][1]*ct.mat[1][1]+ant.mat[2][2]*ct.mat[2][1];
    curent.mat[2][2]=ant.mat[2][1]*ct.mat[2][1]+ant.mat[2][2]*ct.mat[2][2];
    return curent;
}
matr lgput(matr x, int exp)
{
    id.mat[1][1]=1;
    id.mat[1][2]=0;
    id.mat[2][1]=0;
    id.mat[2][2]=1;
    if(exp==0)
        return id;
    if(exp%2==1)
        return inmultire(x,lgput(x,exp-1));
    matr nou;
    nou=lgput(x,exp/2);
    return inmultire(nou,nou);
}

int main()
{
    /*matr t1,t2;
    t1=t2;
    cout<<t1.mat<<' '<<t2.mat;*/
    int k;
    in>>k;
    matr rez;
    initial.mat[1][1]=0;
    initial.mat[1][2]=1;
    initial.mat[2][1]=1;
    initial.mat[2][2]=1;

    first.mat[1][1]=0;
    first.mat[1][2]=1;
    first.mat[2][1]=0;
    first.mat[2][2]=0;
    rez=inmultire(first,lgput(initial,k-1));
    out<<rez.mat[1][2];
    return 0;
}