Cod sursa(job #2925994)

Utilizator raresgherasaRares Gherasa raresgherasa Data 16 octombrie 2022 15:51:13
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

const string fisier = "kfib";

ifstream fin (fisier + ".in");
ofstream fout (fisier + ".out");

ll a[2][2], b[2][2];
const ll mod = 666013;

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

int main(){
  int n; fin >> n;
  n -= 2;
  a[0][0] = 1, a[0][1] = 1, a[1][0] = 1, a[1][1] = 0;
  b[0][0] = 1, b[0][1] = 1, b[1][0] = 1, b[1][1] = 0;
  while (n > 0){
    if (n & 1){
    inmult(b, a);
    }
    n = n / 2;
    inmult(a, a);
  }
  fout << b[0][0];
}