每个人的Python:数学、算法和游戏编程训练营
上QQ阅读APP看书,第一时间看更新

3.7.2 编程实现——如何判断完美数

判断完美数的思路非常简单,我们可以找到所有因数进行累加,最后判断累加的结果是否与原数相等即可。这里也有一个小技巧,在寻找因数时,我们每找到一个可以整除的数,实际上是找到了两个因数,因为如果X可以整除a,则一定存在一个数b乘以a等于X,因此b也是X的一个因数,程序编写如下:

如果你仔细观察题目,会发现其实题目中还有一个非常重要的条件:输入数的规模不大于100000000。我们前面提到过,自然界中的完美数其实非常有限,小于等于100000000的完美数只有5个,分别是:6、28、496、8128、33550336。其实在实际应用中,在确保满足输入规模的前提下,我们可以用查表法来解决这道问题,这将得到极致的提升,示例代码如下:

查表法并不具有完全的通用性,但是很多时候,为了满足效率要求,我们要在“通用性”与“可用性”之间进行平衡。