首页 > 其他分享 >找出1000以内的所有完数

找出1000以内的所有完数

时间:2022-12-31 10:35:00浏览次数:42  
标签:找出 真因子 完美 max sum 完数 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,故程序符合预期。

标签:找出,真因子,完美,max,sum,完数,1000
From: https://www.cnblogs.com/east7/p/17016271.html

相关文章