题目链接
不难发现前10个左右的质数相乘就可以大于1e9了。因而幂次不会很大,约数尽可能多那我们只需要保证约数种类尽可能多,幂次尽可能多就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005]={2,3,5,7,11,13,17,19,23,29};
ll n,ans,p;
void dfs(ll sum,int num,int cnt)
{
if(cnt>9)return;
if(num>p)
ans=sum,p=num;
if(num==p&&sum<ans)
{
ans=sum;
}
for(int i=1;i<=31;i++)
{
if(sum*a[cnt]>n)
return;
dfs(sum*a[cnt],num*(i+1),cnt+1);
sum*=a[cnt];
}
}
int main()
{
scanf("%lld",&n);
dfs(1ll,1,0);
printf("%lld\n",ans);
return 0;
}