背景:
以下图片均来自我的
P
D
F
PDF
PDF文件,谢绝转载。
题目传送门:
https://www.luogu.org/problemnew/show/P4917
题意:
思路:
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define MAXN 1000010
#define mod 19260817
using namespace std;
LL phi[MAXN],sum_phi[MAXN],fac[MAXN];
int inv[mod];
int prime[MAXN];
int n;
void init(int ma)
{
int t=0;
phi[1]=1;
for(int i=2;i<=ma;i++)
{
if(!phi[i]) prime[++t]=i,phi[i]=i-1;
for(int j=1;j<=t&&i*prime[j]<=ma;j++)
{
if(!(i%prime[j]))
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
fac[0]=1;
for(int i=1;i<=ma;i++)
{
sum_phi[i]=sum_phi[i-1]+phi[i];
fac[i]=fac[i-1]*i%mod;
}
inv[0]=inv[1]=1;
for(int i=2;i<mod;i++)
inv[i]=(int)((LL)(mod-mod/i)*inv[mod%i]%mod);
}
LL dg(LL x,LL k)
{
if(!k) return 1;
LL o=dg(x,k>>1);
return k&1?o*o%mod*x%mod:o*o%mod;
}
int main()
{
int T;
scanf("%d",&T);
init(MAXN);
while(T--)
{
LL ans=1;
scanf("%d",&n);
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans=ans*dg(fac[r]*inv[fac[l-1]]%mod,sum_phi[n/l]*2-1)%mod;
}
printf("%lld\n",dg(fac[n],n*2)*inv[ans*ans%mod]%mod);
}
}