Cod sursa(job #2054002)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 1 noiembrie 2017 16:53:06
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#define MOD 666013

using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");

int n, zput2[3][3];

int z[3][3] = {{0, 0, 0}, {0, 0, 1}, {0, 1, 1}};
int zput[3][3] = {{0, 0, 0}, {0, 1, 0}, {0, 0, 1}};

void inm (int a[3][3], int b[3][3], int c[3][3]){
    int d[3][3];
    for(int i = 1; i <= 2; ++ i){
        for(int j = 1; j <= 2; ++ j){
            int x = 0;
            for(int k = 1; k <= 2; ++ k)
                x += (1LL * a[i][k] * b[k][j]) % MOD;
            d[i][j] = x % MOD;
        }
    }
    for(int i = 1; i <= 2; ++ i)
        for(int j = 1; j <= 2; ++ j)
            c[i][j] = d[i][j];
}

int main()
{
    f>>n;
    /*for(int i = 0; i <= 2; ++ i){
        for(int j = 0; j <= 2; ++ j)
            g<<z[i][j]<<" ";
        g<<'\n';
    }*/
    while(n){
        if(n % 2){
            inm(zput, z, zput);
            -- n;
        }
        inm(z, z, z);
        n /= 2;
    }
    g<<zput[1][2] % MOD;
    return 0;
}