PHP程序员面试算法宝典
上QQ阅读APP看书,第一时间看更新

1.14 如何找出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。

实现代码如下:

程序的运行结果为