1 solutions

  • 0
    @ 2025-11-5 16:47:44

    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