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的数的真因子
// 遍历从2到sqrt(num)的所有可能的因子
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
sum += i;
// 如果i和num/i不相等,则加上num/i
if (i * i != num) {
sum += num / i;
}
}
}
return sum == num;
}
}
代码说明
-
main方法遍历2到1000的所有数字,调用isPerfectNumber方法判断是否为完数,如果是则输出。 -
isPerfectNumber方法实现:- 首先处理边界情况(num ≤ 1直接返回false)
- 初始化sum为1(因为1是所有大于1的数的真因子)
- 遍历从2到√num的所有可能的因子
- 如果找到因子i,则同时加上i和num/i(除非i和num/i相等)
- 最后比较sum和num是否相等
输出结果
运行上述代码将输出:

1000以内的完数有:
6 28 496
这三个数就是1000以内的所有完数。

