初等数论之完全数

完全数的定义是:一个正整数,除了它自身之外,所有的真因子(即小于该数本身的因子)之和恰好等于这个数。

例如:
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;
    }
}

这个算法的实现步骤如下:

  1. 在 printPerfectNumbers 方法中,遍历从 1 到 limit 的所有数字。
  2. 对于每个数字,调用 isPerfectNumber 方法,检查它是否为完全数。
  3. 如果是完全数,则输出这个数字。

isPerfectNumber 方法的实现步骤如下:

  1. 初始化一个变量 sum 来保存所有真因子的和。
  2. 遍历从 1 到 num/2 的所有数字,检查它们是否是 num 的因子。
  3. 如果是因子,则将它加到 sum 中。
  4. 最后检查 sum 是否等于 num,如果相等,则说明 num 是完全数,返回 true。否则返回 false。

通过这个算法,我们可以找到小于等于 10000 的所有完全数。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值