RT,一直 RE 3个点,哭了。。。
求调。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e7+5;
ll n;int a[maxn];
int cnt,l[maxn];
inline ll qp(int x,int y){
ll res=1;
while(y){
if(y&1) res*=x;
x*=x;
y>>=1;
}
return res;
}
inline bool check(ll mid,ll p,ll b){
ll u=0;
for(int i=1;i<=a[p];++i)
u+=mid/qp(p,i);
return u>=b;
}
inline ll js(ll a,ll b){
ll l=a,r=1e9;
if(b==1) return a;
ll ans;
while(l<=r){
ll mid=l+r>>1ll;
if(check(mid,a,b)){
r=mid-1;
ans=mid;
}
else l=mid+1;
}
return ans;
}
inline ll work(ll n){
ll p=sqrt(n);
for(ll i=2;i<=p;++i){
if(n%i==0) l[++cnt]=i;
while(n%i==0){
n/=i;
++a[i];
}
}
ll ans=n;
for(ll i=1;i<=cnt;++i)
ans=max(ans,js(l[i],a[l[i]]));
return ans;
}
signed main(){
scanf("%lld",&n);
printf("%lld",work(n));
return 0;
}