感觉很经典的题目,竟然没有题解
质因数分解和约数公式大家都不陌生 直接上图 又公式不难分析出对于n之内的数 尽量让小的因子更多,但并不绝对,比如 2个2 1个3 肯定比 1个2 2个三划算,故选i个2 后面的s一定小于2所选个数 ,这是对于dfs的一个优化 关于这个dfs:对于每个数我们选择多少个它,直接上码
using namespace std;
typedef long long ll;
ll n,sum,t;
ll ans[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,51,53,57};
void dfs(int step,ll res,ll num,ll k){
sum=max(sum,num);
if(step==16)return ;
for(int i=1;i<=k;i++){
if(n/ans[step]>=res){
dfs(step+1,res*=ans[step],num*(i+1),i);
}
}
}
int main()
{
cin>>t;
while(t--){
cin>>n;
sum = 0;
dfs(0,1,1,64);
cout<<sum<<endl;
}
return 0;
}