Cod sursa(job #456823)

Utilizator GulyanAlexandru Gulyan Data 16 mai 2010 19:51:17
Problema Al k-lea termen Fibonacci Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.62 kb
#include <stdio.h>
#include <stdint.h>

#define MOD 666013

typedef struct {
  long long int a, b, c, d;
}Mat;

Mat multiply(Mat x, Mat y) {
  Mat z;
  z.a = (x.a * y.a + x.b * y.c) % MOD;
  z.b = (x.a * y.b + x.b * y.d) % MOD;
  z.c = (x.c * y.a + x.d * y.c) % MOD;
  z.d = (x.c * y.b + x.d * y.d) % MOD;
  return z;
}

Mat power(Mat x, int n) {
  if(n == 0) {
    Mat r = {1, 0, 0, 1};
    return r;
  }
  Mat r = power(x, n/2);
  r = multiply(r, r);
  if(n%2)
    r = multiply(r, x);
  return r;
}

int main() {
  Mat a = {0, 1, 1, 1};
  int n;
  scanf("%d", &n);
  a = power(a, n);
  printf("%lld\n", a.b % MOD);
  return 0;
}