Cod sursa(job #1429537)

Utilizator DobosDobos Paul Dobos Data 6 mai 2015 16:46:45
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
const int mod = 666013;
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
unsigned long long m[3][3];
void ridicare(int k)
{
 unsigned  long long a = m[1][1],b = m[1][2],c = m[2][1],d = m[2][2];
    if(k == 1)
    {
        m[1][1] = (a*a + b*c)%mod;
        m[1][2] = (a*b + b*d)%mod;
        m[2][1] = (c*a + d*c)%mod;
        m[2][2] = (c*b + d*d)%mod;
    }
    else
    {
        m[1][1] = c;
        m[1][2] = d;
        m[2][1] = (a+c)%mod;
        m[2][2] = (b+d)%mod;
    }

}
int imultiri(int n)
{

    if(n <= 1)
        return m[2][2];
    imultiri(n/2);
    ridicare(1);
    if(n % 2 == 1)
        ridicare(2);

}


int main()
{
    int n;
    f >> n;
    m[1][2]=m[2][1]=m[2][2]=1;
    imultiri(n-1);
    g<<m[2][2];
    return 0;
}