Cod sursa(job #2865686)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 9 martie 2022 09:07:10
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>

#define MOD 666013

using namespace std;

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

int k;
int a[2][2], b[2][2], c[2][2], r[2][2];

void init()
{
    a[0][0]=1;
    a[0][1]=1;
    a[1][0]=1;
    a[1][1]=0;
    b[0][0]=1;
    b[0][1]=1;
    b[1][0]=1;
    b[1][1]=0;
    r[0][0]=1;
    r[0][1]=1;
    r[1][0]=1;
    r[1][1]=1;
}

void mult(int x[2][2], int y[2][2], int z[2][2])
{
    z[0][0]=x[0][0]*y[0][0]+x[0][1]*y[1][0];
    z[0][1]=x[0][0]*y[0][1]+x[0][1]*y[1][1];
    z[1][0]=x[1][0]*y[0][0]+x[1][1]*y[1][0];
    z[1][1]=x[1][0]*y[0][1]+x[1][1]*y[1][1];
}

void copiere(int x[2][2], int y[2][2])
{
    x[0][0]=y[0][0];
    x[0][1]=y[0][1];
    x[1][0]=y[1][0];
    x[1][1]=y[1][1];
}

void inmultire()
{
    int n=k-1;
    while(n)
    {
        if(n%2==0) {
            mult(a, b, c);
            copiere(a, c);
            n/=2;
        } else {
            mult(r, a, c);
            copiere(r, c);
            n--;
        }
    }
    fout<<r[0][0];
}

int main()
{
    fin>>k;
    init();
    inmultire();
    return 0;
}