一数学方法分析
二相关原理
https://m.baike.so.com/doc/3567228-3751425.html
三实战演练
最多约数问题
问题描述:正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。例如,1,2,3,10都是正整数10的约数,且div(10)=4。设a和b是两个正整数,a<=b,找出a和b之间约数个数最多的数x。
下面演示用c语言实现
1.产生质数的函数
void primes(){
bool get [MAXP+1];
for(int i=2;i<=MAXP;i++)
get[i]=ture;
for(i=2;i<=MAXP;i++)
if(get[i]){
int j=i+1;
while(j<=MAXP){
get[j]=false;
j+=i;
}
}
for(int ii=2,j=0;ii<=MAXP;ii++)
if(get[ii]){
prim[++j]=ii;
}
2.搜索最多约数的函数
void search(int from,int tot,int num,int low,int up){
if(num>=1)
if((tot>max)||((tot==max)&&(num<numb))){
max=tot;
numb=num;
}
if((low==up)&&(low>num))
search(from,tot*2,num*low,1,1);
for(int i=from;i<=PCOUNT;i++){
if(prim[i]>up)
return;
else{
int j=prim[i],x=low1,y=up,n=num,t=tot,m=1;
while(ture){
m++;
t+=tot;
x/=j;
y/=j;
if(x==y)
break;
n*=j;
search(i+1,t,n,x+1,y);}
}
m=1<<m;
if(tot<max/m)
return;
}
}
3.主函数
int main(){
primes();
cin>>l>>u;
if((l==1)&&(u==1)){
max=1;
numb=1;
}
else{
max=2;
numb=1;
search(1,1,1,l,u);
}
cout<<max<<end1;
return 0;
}