这是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; }