最多约数问题
题目描述
正整数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;
}
还有更好的解决方法,都可以搜到,就不记录了。
感觉自己学的不太好,记录一下自己写过的一些代码,有错误感谢提出!