/* 因爲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<iostream> #include<cstdio> #define maxn 5000010 #define mod 100000007 #define ll long long using 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<<ans<<endl; return 0; }