感觉很经典的题目,竟然没有题解

质因数分解和约数公式大家都不陌生 直接上图 alt 又公式不难分析出对于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;
}