每日经典算法题(九) 完全数
完数(完全数):Perfect Number
题目
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如:6 = 1+2+3。
编程:找出 1000 以内的所有完数。
程序分析
基本程序还是需要通过循环来完成,由于题目限定了范围所以这里我们用 for 循环更加适合。只要理解了如何判定这个数是否为完全数就很简单了。
思路
首先要思考什么是完全数,即他的真因子(除这个数本身以外的约数)相加之和为这个数。所以判断的过程就指向了如何找某个数的约数,依次找出这个数的约数然后将它们累加的结果和该数字比较,若相等这个数就是完全数。
为了方便理解,设定这个数为 n。由于 n 的真因子不包含本身,所以他的真因子最大为 n/2,即将判断约数的范围限定为 1 到 n/2 比较合适。
需要遍历的有:
- 1 - 1000 之间的数字要逐一判断
- 每个数字寻找约数需要从 1 - n/2 去逐一判断
所以我们需要二重 for 循环比较合适。在外层循环需要将约数求和然后和 n 比较结果,可以设定一个 sum 作为因数的和,在内层循环中可以利用 n 和遍历的整数除余是否为 0 来判断是否为因数,若是因数则直接累加在 sum上面。内层循环完成后在外面直接判断 n 和 sum 的值,若相等直接输出结果即可。