Cod sursa(job #2158954)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 10 martie 2018 17:24:38
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <cstdio>
using namespace std;

const int MOD = 9999991;
const int NMAX = 1000005;

int n;
long long factn, fact2n;

void computeFact() {
  long long fact = 1;
  for (int i = 1; i <= n; i++) {
    fact = (fact * i) % MOD;
  }
  factn = fact;
  for (int i = n + 1; i <= 2 * n; i++) {
    fact = (fact * i) % MOD;
  }
  fact2n = fact;
}

long long logPow(long long n, long long p) {
  long long result = 1;
  for (; p; p >>= 1) {
    if (p & 1)
      result = (result * n) % MOD;
    n = (n * n) % MOD;
  }
  return result;
}

long long invers(long long n) {
  return logPow(n, MOD - 2); 
}

long long comb() {
  return fact2n * invers(factn * factn % MOD) % MOD;
}

int main() {
  freopen("dirichlet.in", "r", stdin);
  freopen("dirichlet.out", "w", stdout);

  scanf("%d ", &n);
  computeFact();

  printf("%Ld\n", comb() * invers(n + 1) % MOD);

  return 0;
}