Cod sursa(job #2728559)

Utilizator EckchartZgarcea Robert-Andrei Eckchart Data 23 martie 2021 13:47:56
Problema Dirichlet Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include "bits/stdc++.h"
#include <cassert>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
using pd = pair<double, double>;
using pld = pair<ld, ld>;
const int M = 1e7 - 9;


int main()
{
    ifstream cin("dirichlet.in");
    ofstream cout("dirichlet.out");

    int N;
    cin >> N;

    auto mod = [](const ll a) -> ll
    {
        return (a % M + M) % M;
    };

    auto precalc_mod_inverse = [&mod](const int bound) -> vector<int>
    {
        vector<int> mod_inverse(bound + 1, 1);
        for (int i = 2; i <= bound; ++i)
        {
            mod_inverse[i] = mod(-(M / i) * mod_inverse[M % i]);
        }
        return mod_inverse;
    };

    auto nth_Catalan = [&mod](const int N, const vector<int> &mod_inverse) -> ll
    {
        ll res{1};
        for (ll K = 2; K <= N; ++K)
        {
            res = mod(res * mod((N + K) * mod_inverse[K]));
        }
        return res;
    };

    const auto mod_inverse = precalc_mod_inverse(N);
    cout << nth_Catalan(N, mod_inverse);
}