完全数的定义是:一个正整数,除了它自身之外,所有的真因子(即小于该数本身的因子)之和恰好等于这个数。
例如:
6 是一个完全数,因为它的真因子为 1、2、3,而 1 + 2 + 3 = 6。
28 也是一个完全数,因为它的真因子为 1、2、4、7、14,而 1 + 2 + 4 + 7 + 14 = 28。
496 也是一个完全数,因为它的真因子为 1、2、4、8、16、31、62、124、248,而 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 = 496。
public class PerfectNumber {
public static void main(String[] args) {
// 输出小于等于 10000 的所有完全数
printPerfectNumbers(10000);
}
/**
* 打印指定范围内的完全数
* @param limit 上限值
*/
public static void printPerfectNumbers(int limit) {
// 遍历从 1 到 limit 的所有数字
for (int i = 1; i <= limit; i++) {
// 如果当前数字是完全数,则打印出来
if (isPerfectNumber(i)) {
System.out.println(i);
}
}
}
/**
* 判断一个数字是否为完全数
* @param num 待判断的数字
* @return 是否为完全数
*/
private static boolean isPerfectNumber(int num) {
// 初始化因子之和
int sum = 0;
// 遍历从 1 到 num/2 的所有数字,检查它们是否是 num 的因子
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
// 如果是因子,则累加到因子之和中
sum += i;
}
}
// 如果因子之和等于原数字,则说明是完全数
return sum == num;
}
}
这个算法的实现步骤如下:
- 在 printPerfectNumbers 方法中,遍历从 1 到 limit 的所有数字。
- 对于每个数字,调用 isPerfectNumber 方法,检查它是否为完全数。
- 如果是完全数,则输出这个数字。
isPerfectNumber 方法的实现步骤如下:
- 初始化一个变量 sum 来保存所有真因子的和。
- 遍历从 1 到 num/2 的所有数字,检查它们是否是 num 的因子。
- 如果是因子,则将它加到 sum 中。
- 最后检查 sum 是否等于 num,如果相等,则说明 num 是完全数,返回 true。否则返回 false。
通过这个算法,我们可以找到小于等于 10000 的所有完全数。