Cod sursa(job #2055828)

Utilizator Garen456Paun Tudor Garen456 Data 3 noiembrie 2017 19:56:22
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define p 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
long long k,z;
long long a[4][4],b[4][4],aux[4][4],f[4][4];



int main()
{  fin>>k;
    int i;
    a[1][1]=a[2][2]=1;
    b[1][2]=1;
    b[2][1]=b[2][2]=1;
  f[1][1]=f[1][2]=1;
  z=k-1;
    for(i=0;(1<<i)<=z;++i)
      {
          if((1<<i)&z)
             {
                 aux[1][1]=a[1][1]; aux[1][2]=a[1][2]; aux[2][1]=a[2][1]; aux[2][2]=a[2][2];
                 a[1][1]=(aux[1][1]*b[1][1]+aux[1][2]*b[2][1])%p;
                 a[1][2]=(aux[1][1]*b[1][2]+aux[1][2]*b[2][2])%p;
                 a[2][1]=(aux[2][1]*b[1][1]+aux[2][2]*b[2][1])%p;
                 a[2][2]=(aux[2][1]*b[1][2]+aux[2][2]*b[2][2])%p;
             }
    aux[1][1]=b[1][1]; aux[1][2]=b[1][2]; aux[2][1]=b[2][1]; aux[2][2]=b[2][2];

    b[1][1]=(aux[1][1]*aux[1][1]+aux[1][2]*aux[2][1])%p;
    b[1][2]=(aux[1][1]*aux[1][2]+aux[1][2]*aux[2][2])%p;
    b[2][1]=(aux[2][1]*aux[1][1]+aux[2][2]*aux[2][1])%p;
    b[2][2]=(aux[2][1]*aux[1][2]+aux[2][2]*aux[2][2])%p;
    }
    aux[1][1]=f[1][1];
    aux[1][2]=f[1][2];
    f[1][1]=(aux[1][1]*a[1][1]+aux[1][2]*a[2][1])%p;
    f[1][2]=(aux[1][1]*a[1][2]+aux[1][2]*a[2][2])%p;
    fout<<f[1][1];


    return 0;
}