Cod sursa(job #2781286)

Utilizator Alex_HossuHossu Alexandru Alex_Hossu Data 8 octombrie 2021 22:04:11
Problema Dirichlet Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>

#define MODULO 9999991

void euclid(int a, int b, int *x, int *y) {
  if (b == 0) {
    *x = 1;
    *y = 0;
  } else {
    int x0, y0;

    euclid(b, a % b, &x0, &y0);

    *x = y0;
    *y = x0 - (a / b) * y0;
  }
}

int invMod(int a) {
  int x, y;

  euclid(a, MODULO, &x, &y);

  if (x < 0)
    x += MODULO;

  return x;
}

int main() {
  FILE *fin, *fout;
  int n, i;
  long long fact, nrPerm;

    fin = fopen("dirichlet.in", "r");
    fscanf(fin, "%d", &n);
    fclose(fin);

    fact = 1;
    for (i = 1; i <= n; i++)
        fact = (fact * i) % MODULO;

    nrPerm = 1;
    for (i = n + 2; i <= 2 * n; i++)
        nrPerm = (nrPerm * i) % MODULO;

    nrPerm = (nrPerm * invMod(fact)) % MODULO;

    fout = fopen("dirichlet.out", "w");
    fprintf(fout, "%lld\n", nrPerm);
    fclose(fout);

    return 0;
}