Pagini recente » Cod sursa (job #2568952) | Cod sursa (job #2161153) | Cod sursa (job #2049974) | Cod sursa (job #989413) | Cod sursa (job #641308)
Cod sursa(job #641308)
#include<stdio.h>
using namespace std;
long long r,p,nr,i,j,n,a[2000001],b[1000001],c[1000001];
long long vp(long long baz,long long fac)
{
long long nr11,p1;
nr11=0;
p1=baz;
while(1)
{
nr11=nr11+fac/p1;
p1=p1*baz;
if(p1>fac) break;
}
return nr11;
}
long long ridic(long long a1,long long b1)
{
int aux;
if(b1==0) return 1;
else
if(b1%3==1) return (ridic(a1,b1-1)*a1)%r;
else
if(b1%3==0)
{
aux=ridic(a1,b1/3);
return ((aux*aux)%r*aux)%r;
}
else return ((ridic(a1,b1-2)*a1)%r*a1)%r;
}
int main()
{
freopen("dirichlet.in","r",stdin);
freopen("dirichlet.out","w",stdout);
scanf("%d",&n);
a[1]=1;
for(i=1;i<=2*n;i++)
if(a[i]==0)
{
for(j=i*i;j<=2*n;j=j+i)
a[j]=1;
}
r=9999991;
for(i=1;i<=2*n;i++)
if(a[i]==0)
{
nr++;
b[nr]=i;
c[nr]=vp(i,2*n)-vp(i,n)-vp(i,n+1);
}
p=1;
for(i=1;i<=nr;i++)
p=(p*ridic(b[i],c[i]))%r;
printf("%lld",p);
return 0;
}