Cod sursa(job #2677273)

Utilizator TudorCretuCretu Tudor Andrei TudorCretu Data 26 noiembrie 2020 09:43:55
Problema Dirichlet Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
using namespace std;
#define M 9999991
ifstream f("dirichlet.in");
ofstream g("dirichlet.out");
unsigned long long n, x;
unsigned long long rise(unsigned long long a, unsigned long long b)
{
    if (b == 0) return 1;
    unsigned long long x = rise(a, b / 2);
    if (b % 2 == 0) return (x * x) % M;
    return (((x * x) % M) * a) % M;
}
unsigned long long catalan(unsigned long long n)
{
    unsigned long long i, t = 1, s = 1;
    for (i = 1; i <= n; ++i)
    {
        t = (t * i) % M;
    }
    for (i = n + 2; i <= 2 * n; i++)
    {
        s = (s * i) % M;
    }
    t = rise(t, M - 2);
    return (s * t) % M;
}
int main()
{
    f >> n;
    x = catalan(n);
    g << x;
    return 0;
}