1.问题
如果有一数n ,其真因数 (Proper factor ) 的总和等于n , 则称之为完美数(Perfect Number ),例如以下几个数都是完美数: 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 程式基本上不难,第一眼看到时会想到使用回圈求出所有真因数,再进一步求因数和,不过若n值很大,则此法会花费许多时间在回圈测试上,十分 没有效率,例如求小于10000的所有完美数 。
2.实现思路
如何求小于10000的所有完美数?并将程式写的有效率?基本上有三个步骤:
1.求出一定数目的质数表
2.利用质数表求指定数的因式分解
3.利用因式分解求所有真因数和,并检查是否为完美数
步骤一 与 步骤二 在之前讨论过了,问题在步骤三,如何求真因数和?方法很简单,要先知道将所有真因数和加上该数本身,会等于该数的两倍,
例如:
2 * 28 = 1 + 2 + 4 + 7 + 14 + 28
等式后