题解 P1221 【最多因子数】
题意:
给定范围
思路:
因为
我们都知道,若一个数为
所以我们可以枚举质数以及每个质数的指数,如果相乘大于等于
注意:
因为有些数据可能涉及到了
#include<bits/stdc++.h>
#define N 1000000000
using namespace std;
int a[10005];
int l,r,tot;
bool flag[100005];
long long temp,ans,anss,sum;
void Solve(int x,long long s,long long ans){
temp=s;
if(s>=l&&s<=r){
if(ans>sum){sum=ans;anss=s;}
else if(sum==ans&&s<anss)anss=s;
}
if(x==tot+1)return;
if(s*a[x]>r)return;
int num=0;
while(temp*a[x]<=r){
temp=temp*a[x];
num++;
Solve(x+1,temp,ans*(num+1));
}
Solve(x+1,s,ans);
}
void Init(){
memset(flag,false,sizeof(flag));
for(int i=2;i<=sqrt(N);i++)
if(flag[i]==false){
a[++tot]=i;
for(int j=2;j<=sqrt(N)/i;j++)
flag[i*j]=true;
}
}
int main(){
Init();
scanf("%d%d",&l,&r);
Solve(1,1,1);
printf("Between %d and %d, %lld has a maximum of %lld divisors.\n",l,r,anss,sum);
return 0;
}