如何找出 1000 以内的「完数」

题目描述:

如果一个数恰好等于它的因子之和,那么这个数就被称为「完数」,如 6=1+2+3。编程找出 1000 以内的所有「完数」。

分析与解答:

外层循环 998 次,每次循环得到的 $i 传入下个循环内,内部循环求解出符合 $i 整除 $k 等于 0 的数,如果能够整除,那么说明 $k 是 $i 的一个因子,则用 $sum 累加,直到 $sum+1 等于 $i 条件成立,说明 $i 是一个「完数」。需要注意的是,因为 $sum 求解出的因子是不包括 1 的,所以还需要额外的加 1 到 $sum 中,并且 $i 的一个因子是不会大于 $i/2 的,所以内部循环判断是否继续循环的条件为 $i/2。
实现代码如下:

<?php
    for($i=2;$i<1000;$i++){
        $sum = 0;
        for($k=2;$k <= $i/2; $k++){
            if($i%$k==0){
                $sum +=$k;
            }
        }

        if($sum + 1 == $i){
            echo $i." ";
        }
    }

程序的运行结果为

6 28 496
posted @ 2020-05-30 08:01  橙宝技术  阅读(928)  评论(0编辑  收藏  举报