$\huge \color{orange}{成魔之路->}$ $\huge \color{purple}{算法提高课题解}$
结论:求解 1~N 中约数个数最多的最小数
完整代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
int primes[9]={2,3,5,7,11,13,17,19,23};
int maxd,number; // maxd 表示约数个数,number 表示当前数
// u 表示每一位质数,last 表示上个质数的次数,p 表示当前数,s 表示约数个数
void dfs(int u,int last,int p,int s)
{
//约数个数更多或约数个数相同但当前数更小
if(s>maxd||s==maxd&&p<number)
{
maxd=s;
number=p;
}
//所有质数都枚举结束
if(u==9) return;
//从小到大枚举当前质数的次数
for(int i=1;i<=last;i++)
{
if((LL)p*primes[u]>n) break;
p*=primes[u];
dfs(u+1,i,p,s*(i+1));
}
}
int main()
{
cin>>n;
dfs(0,30,1,1);
cout<<number<<endl;
return 0;
}