Cod sursa(job #2158949)

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

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

int n;
int fact[2 * NMAX];

void computeFact(int upTo) {
  fact[0] = 1;
  for (int i = 1; i <= upTo; i++) {
    fact[i] = (fact[i - 1] * i) % MOD;
  }
}

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(int n, int k) {
  return 1LL * fact[n] * invers(1LL * fact[n - k] * fact[k] % MOD) % MOD;
}

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

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

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

  return 0;
}