Cod sursa(job #941996)

Utilizator IonSebastianIon Sebastian IonSebastian Data 20 aprilie 2013 13:55:53
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
using namespace std;

const int mod = 666013;

long long prod[2][2];

void produs(long long a[2][2], long long b[2][2])
{
    for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 2; ++j)
            prod[i][j] = (a[i][0]*b[0][j] + a[i][1]*b[1][j]) % mod;
    for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 2; ++j)
            a[i][j] = prod[i][j];
}

int main()
{
    ifstream in("kfib.in");
    ofstream out("kfib.out");
    int n;
    in >> n;
    long long a[2][2] = {{1,0},{0,1}};
    long long b[2][2] = {{0,1},{1,1}};
    for (int i = 0; i < 30; ++i) {
        if (1<<i & n)
            produs(a,b);
        produs(b,b);
    }
    out << a[0][1];
    return 0;
}