Cod sursa(job #1718753)

Utilizator dorupopDoru Pop dorupop Data 19 iunie 2016 00:59:58
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int modulo = 666013;
int m[2][2] = { { 0, 1 }, { 1, 1 } }, sol[2][2] = { { 1,0},{0,1} },aux[2][2],n;
FILE *f = fopen("kfib.in", "r");
void inmultire(int m1[2][2], int m2[2][2], int m3[2][2])
{
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            for (int k = 0; k < 2; k++)
                m3[i][j] = (m3[i][j] + (1ll*m1[i][k] * m2[k][j])) % modulo;

}
void rid_put_log(int put)
{
    int i;
    for (i = 0; (1 << i) <= put; i++){
        if ((put & (1 << i)) != 0 ){
            memset(aux, 0, sizeof(aux));
            inmultire(sol, m, aux);
            memcpy(sol, aux, sizeof(aux));
        }
        memset(aux, 0, sizeof(aux));
        inmultire(m, m, aux);
        memcpy(m, aux, sizeof(aux));
    }
}
int main()
{
    fscanf(f, "%d", &n);
    rid_put_log(n-1);
    //sol[1][1]=(sol[0][1]+sol[1][1])%modulo;


    printf("%d ",sol[1][1]);
    return 0;
}