求助求助求助
查看原帖
求助求助求助
464044
jczw_fanziqian楼主2021/4/25 14:44

很迷,莫名地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;
}
2021/4/25 14:44
加载中...