Cod sursa(job #637846)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 20 noiembrie 2011 17:08:34
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.98 kb
#include <cstdio>

#define NMax 1000005
#define Mod 9999991

using namespace std;

int N;
long long FN, FK;

void ComputeFactorial ()
{
    long long F=1;
    FN=FK=1;
    for (int i=2; i<=2*N; ++i)
    {
        F=(F*i)%Mod;
        if (i==N)
        {
            FK=F;
        }
        if (i==2*N)
        {
            FN=F;
        }
    }
}


long long Pow (long long X, int P)
{
    long long S=1;
    while (P>0)
    {
        if (P%2==0)
        {
            X*=X;
            X%=Mod;
            P/=2;
        }
        else
        {
            --P;
            S*=X;
            S%=Mod;
        }
    }
    return S;
}

long long C (int n, int k)
{
    return (FN*Pow ((FK*FK)%Mod, Mod-2)%Mod)%Mod;
}

int main()
{
    freopen ("dirichlet.in", "r", stdin);
    freopen ("dirichlet.out", "w", stdout);
    scanf ("%d", &N);
    ComputeFactorial ();
    printf ("%lld\n", (Pow ((N+1)%Mod, Mod-2)*C(2*N, N))%Mod);
    return 0;
}