Cod sursa(job #1788765)

Utilizator dnprxDan Pracsiu dnprx Data 26 octombrie 2016 14:05:44
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
/**
  Numarul de posibilitati este (2*n)!/((n+1)!/n!)
  Invers modular, ridicare la putere in timp logaritmic
*/

#include <bits/stdc++.h>
#define MOD 9999991

using namespace std;

long long n;

long long LgPut(long long a, long long n)
{
    long long rez = 1;
    while(n > 0)
    {
        if(n % 2 == 1)
            rez = rez * a % MOD;
        a = a * a % MOD;
        n /= 2;
    }
    return rez;
}

int Rezolvare()
{
    long long t, sol;
    int i, N;
    N = 2 * n;
    t = sol = 1;
    for(i = n + 1; i <= N; ++i)
        sol = sol * i % MOD;
    n++;
    for(i = 2; i <= n; ++i)
        t = t * i % MOD;

    sol = sol * LgPut(t, MOD - 2) % MOD;

    return (int)(sol % MOD);
}

int main()
{
    ifstream fin("dirichlet.in");
    ofstream fout("dirichlet.out");
    fin >> n;
    int x = Rezolvare();
    fout << x << "\n";
    fout.close();
    return 0;
}