Cod sursa(job #1506684)

Utilizator BLz0rDospra Cristian BLz0r Data 20 octombrie 2015 21:19:46
Problema Dirichlet Scor 96
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Mod 9999991
#define Nmax 2000002

FILE *f = fopen ( "dirichlet.in", "r" );
FILE *g = fopen ( "dirichlet.out", "w" );

int Fact[Nmax];

int LgPow ( int A, int x ){

    int rez = 1;

    while ( x ){
        if ( x & 1 )
            rez = ( 1LL * rez * A ) % Mod;
        x >>= 1;
        A = ( 1LL * A * A ) % Mod;
    }

    return rez;
}

int Invers ( int N ){
    return LgPow( N, Mod-2 );
}

int main(){

    int N;

    fscanf ( f, "%d", &N );
    int go = N+N;

    Fact[0] = 1;
    for ( int i = 1; i <= go; ++i )
        Fact[i] = ( 1LL * Fact[i-1] * i ) % Mod;

    int Sol = Fact[go];
    int invN = Invers(Fact[N]);

    Sol = ( 1LL * Sol * invN ) % Mod;
    Sol = ( 1LL * Sol * invN ) % Mod;
    Sol = ( 1LL * Sol * Invers ( (N+1)%Mod ) ) % Mod;

    fprintf ( g, "%d", Sol );

    return 0;
}