1 solutions
-
0
C++ :
#include<iostream> #include<cstdio> using namespace std; typedef long long ll; const ll mod=100000007ll; int flag[5000010]={0}; ll prime[400010],An=1,n,cnt=0; ll pow(ll a,ll b){ ll r; for(r=1;b;a=a*a%mod,b>>=1) if(b&1) r=r*a%mod; return r;} int main(){ //freopen("number.in","r",stdin); //freopen("number.out","w",stdout); scanf("%lld",&n); for(ll i=2;i<=n;i++){ if(!flag[i]) prime[++cnt]=i; for(ll j=1;j<=cnt&&i*prime[j]<=n;j++){ flag[i*prime[j]]=1; if(i%prime[j]==0) break; } }for(ll i=1;i<=cnt;i++){ ll t=n,a=0; while(t) t/=prime[i], a+=t; if(a>1){ if(a&1) a--; An=An*pow(prime[i],a)%mod; } }cout<<An<<endl; return 0; }
- 1
Information
- ID
- 17989
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By