很迷,莫名地WA了456三个点,思路是从1开始乘素数,样例也能过,sto orz
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int prime[37]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139};
ll l,u,p,d;
ll ans,ans_cnt;
void dfs(ll now,int pri,int premi,int cnt){
if(pri>34)return;
if(now<=(ll)0)return;
if(now>(ll)u)return;
if(now>=(ll)l&&now<=(ll)u){
if(cnt>ans_cnt){
ans_cnt=cnt;ans=now;
}if(!(ans_cnt-cnt)){
ans=now;
}
}
for(int i=1;i<=premi;i++){
if(now*(ll)prime[pri]>(ll)u)break;
dfs(now*=(ll)prime[pri],pri+1,i,cnt*(i+1));
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>l>>u;
if(u<l){
int t=l;l=u;u=t;
}
dfs((ll)1,0,100,1);
p=ans;
d=ans_cnt;
cout<<"Between "<<l<<" and "<<u<<", "<<p<<" has a maximum of "<<d<<" divisors.";
return 0;
}