Cod sursa(job #2219603)

Utilizator dfettiDaniel Fetti dfetti Data 9 iulie 2018 13:39:41
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
 
ifstream fin("kfib.in");
ofstream fout("kfib.out");
 
 
int K;
int sol[2][2], f[2][2];
const int mod = 666013;
void Inmultire(int a[2][2], int f[2][2]);
void Putere(int k);
 
 
int main()
{
    fin >> K;
    sol[0][0] = f[0][0] = 0;
    sol[0][1] = f[0][1] = sol[1][0] = f[1][0] = sol[1][1] = f[1][1] = 1;
    Putere(K);
    fout << sol[0][0];
    return 0;
}
 
 
void Inmultire(int a[2][2], int f[2][2])
{
    long long aux[2][2];
 
    for ( int i = 0; i < 2; ++i )
        for ( int j = 0; j < 2; ++j )
        {
            aux[i][j] = 0;
            for ( int k = 0; k < 2; ++k )
                aux[i][j] += 1LL * a[i][k] * f[k][j];
        }
    for ( int i = 0; i < 2; ++i )
        for ( int j = 0; j < 2; ++j )
            a[i][j] = (int)(aux[i][j] % mod);
};
 
void Putere(int k)
{
    if ( !k )   return;
    if ( k % 2 )
        Inmultire(sol, f);
    Inmultire(f, f);
    Putere(k / 2);
};