题目描述:
数学家们喜欢各种类型的有奇怪特性的数。例如,他们认为 945 是一个有趣的数,因为它是第一个所有约数之和大于本身的奇数。
为了帮助他们寻找有趣的数,你将写一个程序扫描一定范围内的数,并确定在此范围内约数个数最多的那个数。不幸的是,这个数和给定的范围的都比较大,用简单的方法寻找可能需要较多的运行时间。所以请确定你的算法能在几秒内完成最大范围内的扫描。
输入格式:
只有一行,给出扫描的范围,由下界 L 和上界 U 确定。满足 2≤L≤U≤10^9。
输出格式:
对于给定的范围,输出该范围内约数个数 D 最多的数 P。若有多个,则输出最小的那个。请输出 Between L and U,P has a maximum of D divisors.
,其中 L,U,P,D 的含义同前面所述。
样例输入:
1000 2000
样例输出:
Between 1000 and 2000, 1680 has a maximum of 40 divisors.
代码(请不要直接复制,否则会很惨):
#include<iostream>
#include<cstdio>
using namespace std;
int l,u,ys=0,shu;
int p(int x){
int cnt=0;
for(int i=1;i<=x;i++)
if(x%i==0) cnt++;
return cnt;
}
int main(){
scanf("%d %d",&l,&u);
shu=l;
for(int i=l;i<=u;i++){
if(p(i)>ys){
ys=p(i);
shu=i;
}
}
printf("Between %d and %d, %d has a maximum of %d divisors.",l,u,shu,ys);
return 0;
}
这是我自己写的第一道 提高+/省选- 的题,所以纪念一下!!!
QWQ!!!