题目描述:
如果一个数恰好等于它的因子之和,那么这个数就被称为「完数」,如 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