下面是融通ň更好的算法。我会用文字来描述它,所以你可以自己编写代码。
1) Set f = 2. Variable f represents the current trial factor.
2) If f * f > n, then n must be prime, so output n and stop.
3) Divide n by f. If the remainder is 0, then f is a factor of n,
so output f and set n = n/f, then return to Step 2.
4) Since the remainder in the prior step was not 0, set f = f + 1
and return to Step 2.
例如,对因子13195,首先设置˚F = 2;步骤2中的测试未得到满足,步骤3中的剩余部分为1,因此在步骤4中设置f = 3并返回到步骤2.现在步骤2中的测试未得到满足,步骤3中的剩余部分为1 ,因此在步骤4中设置f = 4并返回步骤2.现在步骤2中的测试未得到满足,步骤3中的剩余部分为3,因此在步骤4中设置了f = 5并返回步骤2
现在步骤2中的测试未得到满足,但步骤3中的剩余部分为0,因此5是13195的因子;输出5,设置为n = 2639,并返回步骤2.现在步骤2中的测试未得到满足,步骤3中的剩余部分为4,因此在步骤4中设置了f = 6并返回步骤2。现在,在步骤2中的试验是不满足,则在步骤3中余数为5,因此在步骤4中设置˚F = 7,并返回到步骤2。
现在在步骤2中的试验是不满足,但步骤3中的余数为0,所以7是2639的因子(也是13195);输出7,设置为n = 377,并返回步骤2.现在步骤2中的测试未得到满足,步骤3中的剩余部分为6,因此在步骤4中设置了f = 8并返回步骤2。以这种方式继续,直到f = 13。
现在,在步骤2中的试验是不满足,但是在步骤3中余数为0,所以图13是377(以及2639和13195)的一个因素;输出端13,设置Ñ = 29,并返回到步骤2中步骤2在这里,测试是满足,因为13×13 = 169,其大于29,所以29是质数,它输出和停止。最终分解为5 * 7 * 13 * 29 = 13195.
的600851475143件作品中完全相同的方式的分解,不同之处在于它需要更长的时间。有更好的方法来整数。但是这个算法很简单,对于PE3来说已经足够了。
没有与此算法的主要问题。建议:在循环中添加几条打印语句,以查看算法产生的数字。不要试图处理这个庞大的号码,除非你确定你的代码可以在你可以手动检查的小号码上正常工作。在相关说明中,您可能会发现使用铅笔和纸张遵循您的算法很有帮助。 –