Pagini recente » Cod sursa (job #2950550) | Cod sursa (job #2956938) | Cod sursa (job #2244544) | Cod sursa (job #883166) | Cod sursa (job #614078)
Cod sursa(job #614078)
Utilizator |
Mr. Noname cezar305 |
Data |
5 octombrie 2011 16:49:02 |
Problema |
Dirichlet |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.8 kb |
#include <stdio.h>
#define MAXN 1000010
#define MOD 9999991
int A[MAXN];
int i,j,N;
int sum;
inline int f(int N, int p)
{
int sol = 0;
while (N) {
N /= p;
sol += N;
}
return sol;
}
int main()
{
freopen("dirichlet.in","r",stdin);
freopen("dirichlet.out","w",stdout);
scanf("%d\n",&N);
for (i=1; 2*i+1<=2 * N; ++i){
if (A[i] != 0) continue;
for (j=3 * (2*i+1); j <=2 * N; j+=2 * (2*i+1))
A[(j-1)/2] = -1;
}
sum = 1LL;
A[0] = f(2*N,2) - f(N,2) - f(N+1,2);
for (j=1; j<=A[0]; ++j)
sum = (1LL * sum * 2) % MOD;
for (i=1; (2*i+1) <= 2 * N; ++i){
if (A[i] != 0) continue;
int prim = 2*i+1;
A[i] = f(2*N, prim) - f(N, prim) - f(N+1, prim);
for (j=1; j<=A[i]; ++j)
sum = (1LL * sum * prim) % MOD;
}
printf("%d\n", sum);
return 0;
}