Pagini recente » Cod sursa (job #2991034) | Istoria paginii runda/ktmalx_93 | Cod sursa (job #1058148) | Istoria paginii utilizator/xxena | Cod sursa (job #648743)
Cod sursa(job #648743)
# include <cstdio>
const char *FIN = "dirichlet.in", *FOU = "dirichlet.out";
const int MAX = 1000005, MOD = 9999991;
int N, F[MAX], I[MAX];
inline int mod (long long A) {
if (A >= MOD) A %= MOD;
if (A < 0) A += MOD;
return A;
}
inline int C (int N, int K) {
return mod (1LL * F[N] * I[N - K] * I[K]);
}
inline int lgput (int N, int P) {
int sol = 1;
for ( ; P ; P >>= 1 ) {
if ( P & 1 )
sol = mod (1LL * sol * N);
N = mod (1LL * N * N);
}
return sol;
}
inline int cat (int N) {
F[0] = I[0] = 1;
for (int i = 1; i <= N << 1; ++i) {
F[i] = mod (1LL * F[i - 1] * i);
I[i] = lgput (F[i], MOD - 2);
}
return mod (C(N << 1, N) - C(N << 1, N + 1));
}
int main (void) {
fscanf (fopen (FIN, "r"), "%d", &N);
fprintf (fopen (FOU, "w"), "%d", cat (N));
}