题目描述
正整数x 的约数是能整除x 的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a 和b之间约数个数最多的数x
输入
输入2 个正整数a≤b≤5000000,编程计算a 和b 之间约数个数最多的数。
输出
程序运行结束时,找到a 和b 之间约数个数最多的数是x,将div(x)输出
样例输入
1 36
样例输出
9
Code
n的约数的计算
Code 1 最笨的计算【时间超限】
从1-n进行循环找到约数,但是这种方法并不可取,肯定会时间超限的
#include<stdio.h>
int main()
{
int a,b,max=0,i,j,cnt;
//scanf("%d%d", &a,&b);
a=1; b=50;
for(i=a;i<=b;i++){
for(j=1,cnt=0;j<=i;j++){
if(i%j==0) cnt++;
}
printf("%-2d: %-6d", i,cnt);
if((i-a+1)%8==0) printf("\n");
}
return 0;
}
1~50
1 : 1 2 : 2 3 : 2 4 : 3 5 : 2 6 : 4 7 : 2 8 : 4
9 : 3 10: 4 11: 2 12: 6 13: 2 14: 4 15: 4 16: 5
17: 2 18: 6 19: 2 20: 6 21: 4 22: 4 23: 2 24: 8
25: 3 26: 4 27: 4 28: 6 29: 2 30: 8 31: 2 32: 6
33: 4 34: 4 35: 4 36: 9 37: 2 38: 4 39: 4 40: 8
41: 2 42: 8 43: 2 44: 6 45: 6 46: 4 47: 2 48: 10
49: 3 50: 6
Code 2 开方处理【时间超限】
但是根据下面的规律
1 1
2 1 2
3 1 3
4 1 2 4
5 1 5
6 1 2 3 6
7 1 7
8 1 2 4 8
当1<=i<sqrt(n),此时的个数记为a
然后进行中间的判断:n%sqrt(n)==