Cod sursa(job #1835491)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 26 decembrie 2016 22:32:57
Problema Dirichlet Scor 92
Compilator c Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define MOD 9999991

void InvMod(long long a, long long b, long long *x, long long *y){

if(!b){
    *x = 1;
    *y = 0;
}else{
    long long x0, y0;
    InvMod(b, a % b, &x0, &y0);
    *x = y0;
    *y = x0 - (a / b) * y0;
    }
}

long long Comb(long long n, long long k){

long long i, result = 1, j=1;
long long factorial=1, x, y;

for(i=2; i<=k+1; i++){//(additional +1) for catalan 1/n+1..
    factorial = (factorial%MOD * i%MOD)%MOD;
}
for(i=0; i<k; i++){
    result = (result%MOD * (n-i)%MOD)%MOD;
}
InvMod(factorial, MOD, &x, &y);
while (x <= 0) x += MOD;

return (x%MOD * result%MOD)%MOD;
}

int main() {

FILE *file1, *file2;
long long N;

file1 = fopen("dirichlet.in", "r");
file2 = fopen("dirichlet.out", "w");

fscanf(file1, "%lld", &N);
fprintf(file2, "%lld", Comb(2*N, N));

return 0;
}