Java 找出1000以内的所有完数
完数是指一个数等于它的真因子(除了自身以外的约数)之和的数,6的真因子是1、2、3,而1+2+3=6,所以6是一个完数。

以下是Java代码实现:
public class PerfectNumbers {
public static void main(String[] args) {
System.out.println("1000以内的完数有:");
for (int i = 2; i <= 1000; i++) {
if (isPerfectNumber(i)) {
System.out.print(i + " ");
}
}
}
// 判断一个数是否是完数
public static boolean isPerfectNumber(int num) {
if (num <= 1) {
return false;
}
int sum = 1; // 1是所有大于1的数的真因子
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum == num;
}
}
代码说明:
main方法遍历2到1000的所有整数,调用isPerfectNumber方法判断每个数是否是完数。isPerfectNumber方法:- 首先排除小于等于1的数(完数定义要求大于1)
- 初始化sum为1(因为1是所有大于1的数的真因子)
- 遍历2到num/2的所有整数,检查是否能整除num
- 如果能整除,则将该数加到sum中
- 最后比较sum是否等于num,如果是则返回true
输出结果:
运行上述程序将输出:
1000以内的完数有:
6 28 496
数学背景:
在1000以内只有三个完数:6、28和496,下一个完数是8128,已经超过了1000,完数在数学中相对罕见,目前已知只有51个完数。

