Cod sursa(job #2779999)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 5 octombrie 2021 18:28:42
Problema Dirichlet Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#define MOD 9999991LL

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

int invMod( int a, int m ) {
    int d, x, y;
    euclid( a, m, &d, &x, &y );
    return x;
}

int main()
{
    int n;
    FILE *fin = fopen( "dirichlet.in", "r" );
    fscanf( fin, "%d", &n );
    fclose( fin );

    int rez = 1;
    for( int i = n + 2; i <= 2 * n; i++ ) 
        rez = ( long long )rez * i % MOD;

    int d = 1;
    for( int i = 2; i <= n; i++ )
        d = ( long long )d * i % MOD;

    rez = ( long long )rez * ( invMod( d, MOD ) + MOD ) % MOD;
    
    FILE *fout = fopen( "dirichlet.out", "w" );
    fprintf( fout, "%d\n", rez );
    fclose( fout );
    return 0;
}