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

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

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Murrays

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值