Pagini recente » Cod sursa (job #2644686) | Cod sursa (job #2108260) | Cod sursa (job #3293874) | Cod sursa (job #937785) | Cod sursa (job #636378)
Cod sursa(job #636378)
#include <cstdio>
#define M 9999991
#define MAXN 2000005
#define ll long long
using namespace std;
int N;
ll fact[MAXN];
void invers(ll &m, ll &n, int o, int p)
{
if (!p)
m = 1, n = 0;
else {
invers(m, n, p, o % p);
ll a = m;
m = n;
n = a - n * (o / p);
}
}
int combk (int x, int y) {
ll px = 1, py = 1, pxy = 1;
ll ipy = 0, ipxy = 0;
px = fact[x]; py = fact[y]; pxy = fact[x - y];
ll mm = 0, nn = 0;
invers (ipy, mm, py, M);
invers (ipxy, nn, pxy, M);
if (ipy <= 0) ipy = M + ipy % M;
if (ipxy <= 0) ipxy = M + ipxy % M;
//printf ("%d %d %d\n", px, ipy, ipxy);
ll p1 = (px * ipy) % M ;
p1 = (p1 * ipxy) % M;
return p1;
}
int main() {
freopen("dirichlet.in", "r", stdin);
freopen("dirichlet.out", "w", stdout);
scanf("%d\n", &N);
fact[0] = 1;
for(int i = 1; i <= 2 * N; i++)
fact[i] = (fact[i - 1] * i) % M;
ll iN = 0, p;
invers(iN, p, (N + 1), M);
if(iN <= 0) iN = M + iN % M;
printf("%lld\n", (combk(2 * N, N) * iN) % M);
return 0;
}