解析:
以後再說。。。。
代碼:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define gc getchar
#define pc putchar
#define cs const
#define st static
inline
ll getint(){
re ll num=0;
re char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))num=(num<<1)+(num<<3)+(ch^48),ch=gc();
return num;
}
bool mark[50002];
int prime[50002],pcnt;
inline
void linear_sieves(int len=50000){
mark[1]=true;
for(int re i=2;i<=len;++i){
if(!mark[i])prime[++pcnt]=i;
for(int re j=1;j<=pcnt&&i*prime[j]<=len;++j){
mark[i*prime[j]]=true;
if(i%prime[j]==0)break;
}
}
}
int ans,maxn;
ll n;
inline
void dfs(ll num,ll tot,int pos,int up){
if(maxn<tot||(maxn==tot&&num<ans)){
ans=num;
maxn=tot;
}
if(pos>pcnt)return ;
for(int re i=1;i<=up;++i){
num*=prime[pos];
if(num>n)return ;
dfs(num,tot*(i+1),pos+1,i);
}
}
signed main(){
freopen("antip.in","r",stdin);
freopen("antip.out","w",stdout);
n=getint();
linear_sieves(min(n,(ll)50000));
dfs(1,1,1,500);
cout<<ans<<endl;
return 0;
}