Pagini recente » Cod sursa (job #1787319) | Cod sursa (job #2561054) | Cod sursa (job #73131) | Cod sursa (job #40141) | Cod sursa (job #658284)
Cod sursa(job #658284)
#include <cstdio>
#define M 9999991
#define MAXN 2000005
#define ll long long
using namespace std;
int N;
ll Nfact, N2fact;
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 = N2fact; py = Nfact; pxy = Nfact;
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);
ll a = 1, b;
b = 1;
for(int i = 1; i <= 2 * N; i++) {
a = (1LL * b * i) % M;
if(i == N) Nfact = a;
b = a;
}
N2fact = a;
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;
}