Cod sursa(job #2710865)

Utilizator FrostfireMagirescu Tudor Frostfire Data 23 februarie 2021 11:04:04
Problema Dirichlet Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <iostream>
#include <fstream>
#define ll long long
#define NMAX 1000000
#define MOD 9999991

using namespace std;

ifstream fin("dirichlet.in");
ofstream fout("dirichlet.out");

ll n; 
int fact[2*NMAX+10];

void precalc()
{	fact[0] = 1;
	for(int i=1; i<=2*NMAX; i++)
		fact[i] = (ll)fact[i-1] * (ll)i % MOD;
}

ll lgput(ll a, ll n)
{	if(!n) return 1;
	if(n % 2 == 0) return lgput(a*a % MOD, n/2);
	return a * lgput(a*a % MOD, n/2) % MOD;
}

ll C(ll n, ll k)
{	ll val1 = (ll)fact[n], val2 = (ll)fact[k] * (ll)fact[n-k] % MOD;
	return val1 * lgput(val2, MOD - 2) % MOD;
}

int main()
{
	precalc();
	fin >> n;
	fout << C(2 * n, n) * lgput(n + 1, MOD - 2) % MOD;
	return 0;
}