/*由于longlong学长在题解里把这个题略了我稍微解释一下这道题1-n乘起来最大就是 n!下面我们考虑怎么保证他是一个完全平方数对于每个数 x 我们分解成 x=p1^a1*p2^a2*p3^a3.....其中pi是质数 (他有个学名叫做 唯一分解定理)再考虑一个完全平方数有什么性质 4=2^2 16=2^4 36=2^2*3^2 144=2^4*3^2 可以看出(也可以自己证出)对于一个完全平方数x他分解完之后 每个ai都是偶数好现在思路明确 把n!分解好 对于ai是奇数的 我们把那个单独的pi扔掉即可然后说一下怎么求n!里面有几个pi如下代码中的Solve函数 ai=n/pi+n/pi^2+n/pi^3+n/pi^4.....直到pi^x>n 具体怎么证的自行研究 然后没了 另外取模的数是1e8+7 不是1e9+7 另外别忘了开longlong */#include#include #define maxn 5000010#define mod 100000007#define ll long longusing namespace std;ll n,prime[maxn/10],c[maxn/10],num,ans=1;bool f[maxn];void Prime(){ for(int i=2;i<=n;i++){ if(f[i]==0)prime[++num]=i; for(int j=1;j<=num;j++){ if(i*prime[j]>maxn-10)break; f[i*prime[j]]=1; if(i%prime[j]==0)break; } }}void Solve(){ for(int i=1;i<=num;i++){ ll P=prime[i]; if(P>n)break; while(n>=P){ c[i]+=n/P;P*=prime[i]; } }}ll Qc(ll a,ll b){ ll r=1; while(b){ if(b&1)r=r*a%mod; b>>=1;a=a*a%mod; } return r%mod;}int main(){ cin>>n; Prime();Solve(); for(int i=1;i<=num;i++) if(c[i]&1)c[i]--; for(int i=1;i<=num;i++){ if(prime[i]>n)break; ans=ans*Qc(prime[i],c[i])%mod; } cout< <