这是ac代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll a[]={2,3,5,7,11,13,17,19,23};
ll cnt[12];
ll vt=-1,vts=2e9;
ll pw(ll c,ll b) {ll ans = 1;while(b){if(b&1){ans = ans*c;--b;}c = c*c;b >>= 1;}return ans;}
void dfs(ll ans,ll sum,ll u)
{
if(u>8) return;
for(ll i=1;i<=sum;i++)
{
if(ans*pw(a[u],i)<n)
{
cnt[u]=i;
dfs(ans*pw(a[u],i),i,u+1);
cnt[u]=0;
}
else break;
}
ll vns=1;
for(ll i=0;i<8;i++)
{
if(cnt[i]) vns*=(cnt[i]+1);
}
if(vns>vt||(vns==vt&&ans<vts)) {vt=vns;vts=ans;}
}
int main()
{
cin>>n;
dfs(1ll,31ll,0ll);//当前答案是多少?上一个选了多少?到了第几个数.
cout<<vts<<endl;
return 0;
}
京公网安备 11010502036488号