题目描述
小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1
的正整数的所有因子之和等于它的本身,则称这个数是完数,比如 6
,28
都是完数:6=1+2+3
;28=1+2+4+7+14
。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他。
输入输出格式
输入格式
输入包含两个正整数 n1
和 n2
,表示题目描述中的数据范围。 正整数之间以空格间隔。
输出格式
针对输入,请打印出 n1
和 n2
之间(包括边界)存在的完数个数。
输入输出样例1
输入
2 5
输出
0
输入输出样例2
输入
5 7
输出
1
说明提示
1<n1,n2<10000
【Java代码及解题思路】
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 输入n1,n2
int n1,n2;
Scanner scanner = new Scanner(System.in);
n1 = scanner.nextInt();
n2 = scanner.nextInt();
// 区间内完数的个数
int num = 0;
// 从n1遍历到n2
for(int i = n1;i<n2;i++){
// 该数全部因子的和
int sum = 0;
// 寻找因子
for(int j = 1;j < i;j++){
// 若j为该数的因子
if(i%j == 0){
// 相加
sum =sum + j;
}
}
// 若该数全部因子的和==该数,则区间内完数的个数+1
if(sum == i){
num ++;
}
}
// 输出
System.out.println(num);
}
}