找出1000以内的所有完数

题目

找出1000以内的所有完数。一个数如果恰好等于它的真因子之和,这个数就称为"完数"。例如6=1+2+3。

基本概念

假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。 1, -1, n 和 -n 这些数叫做 n 的明显因子。本文只讨论正因子。

完全数(Perfect number),又称完数、完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

算法分析

找到一个正整数n的所有真因子的和sum,如果sum恰好等于n,那么n就是完美数。

夯实基础

/**

* @Author Wiener

* @Date 2022-12-31

* @Description: 找1000以内的完美数

*/

public class PerfectNumber {

public static void main(String[] args) {

perfectNum(1000);

}

/**

* 寻找[1,max]区间的完美数

*

* @param max 右闭区间

*/

public static void perfectNum(Integer max) {

for (int i = 1; i < max; i++) {

//中间变量sum, 用于因子j的累加

int sum = 0;

for (int j = 1; j < i; j++) {

if (i % j == 0) {

//累计i的公约数j

sum += j;

}

}

//真因子之后等于自身就是完美数

if (sum == i) {

System.out.println(i + "是完数");

}

}

}

}

执行后,打印结果如下:

6是完数

28是完数

496是完数

而查阅资料得知,1000内的完美数的确是只有6、28和496,故程序符合预期。


匿名浏览器挑选指南:哪一个最适合你?
七日杀怎么升级木框