最多约数问题,求一个数的约数个数

一数学方法分析​​​​​​​

ad3ffff80b1943b5ac73ed10ed92d135.jpg

 二相关原理

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;
	}

猜你喜欢

转载自blog.csdn.net/m0_65485230/article/details/129308394