题目:http://noi.openjudge.cn/ch0407/7591/
分析:详见前几篇博文
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
const int Tmax=20000005,pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int n,m;
unsigned long long ans[Tmax];
void dfs(int p,unsigned long long int sum,unsigned int num,int limit)
{
if(sum>m) return;
ans[sum]=num;
int i;
for(i=1;i<=limit;i++)
{
if(m/pri[p]<sum) break;
dfs(p+1,sum*=pri[p],num*(i+1),i);
}
return;
}
int main()
{
int i;
unsigned long long int top=0;
bool first=true;
scanf("%d%d",&n,&m);
dfs(1,1,1,63);
for(i=1;i<n;i++)
top=max(top,ans[i]);
for(i=n;i<=m;i++)
if(ans[i]>0&&top<ans[i])
{
top=ans[i];
if(first) printf("%d",i),first=false;
else printf(",%d",i);
}
if(first==true) printf("NO");
return 0;
}