【算法】最多约数问题

最多约数问题

题目描述

正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。例如,1,2,5,10都是正整数10的约数,且div(10)=4。 对于给定的2个正整数a<=b,编程计算a与b之间约数个数最多的数。

输入

输入的第1行有两个正整数a和b。

输出

若找到的a和b之间约数个数最多的数是x,则输出div(x)。

样例输入

1 36

样例输出

9

解题思路:

一:采用暴力循

扫描二维码关注公众号,回复: 4232656 查看本文章

二:因为暴力循环量太大,太小的数字可以不用循环,所以我选择比较最大值b的开根和b/2比较,保留小的那个,从这里循环

#include<stdio.h>
#include<math.h>
#include<time.h>
int divive(int n){
	int sum=0;
	int i,j;
	for(i=1;i<sqrt(n);i++){
		if(n%i==0) sum+=2;
	}
	j=sqrt(n);
	if(j*j==n) sum++;
	return sum;
}
int main(){
	int a,b,i,j,k,max;
	scanf("%d%d",&a,&b);
	max=0;
	clock_t start,finish;
   	double totaltime;
	//1.
	start=clock();
	for(i=a;i<=b;i++){
		j=yueshu(i);
		if(max<j) max=j;
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n该方法运行时间为%f",totaltime);
	
	//2.
	start=clock();
	if(a<b/2) j=a;
	else
		j=b/2;
	for(i=j;i<=b;i++){
			k=yueshu(i);
		if(max<k) max=k;
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n该方法运行时间为%f",totaltime);
	                                                                                                                                                                                                  
	printf("\n最大约数为:%d",max);	
	return 0;
	
}

还有更好的解决方法,都可以搜到,就不记录了。

感觉自己学的不太好,记录一下自己写过的一些代码,有错误感谢提出!

猜你喜欢

转载自blog.csdn.net/sunshine641/article/details/84494651