用于计算阶乘的快速算法

时间:2009-11-17 19:55:17

标签: algorithm performance factorial

我发现this page描述了许多用于计算阶乘的算法。不幸的是,解释很简洁,我不想逐行筛选源代码来理解算法背后的基本原理。

有人能指出我对计算阶乘的这些(或其他快速)算法的更详细描述吗?

编辑: This page描述了素数因子分解的方法,这是所有性能最佳的因子算法的共同技术。它还包含Python中的一些很好的示例代码。作者链接到a description of binary splitting并引用算法杂志(“计算因子的复杂性”)中的一篇文章,看起来很有希望,如果我只能抓住它的话。 / p>

2 个答案:

答案 0 :(得分:9)

查看Richard Fateman的paper (PDF link)。代码示例在Lisp中,但无论如何,大部分秘密归结为最小化你必须做的bignum(任意精度整数)计算的数量。

当然,如果你不需要/有bignums,它是微不足道的;查找表或简单循环都可以。

编辑:如果您可以使用近似答案,则可以直接通过对log(k)的{​​{1}}求和或使用古老{{}来计算阶乘的对数{3}}。您希望尽可能使用对数以避免溢出;特别是,斯特林近似的一种天真应用会在许多不必要的地方溢出。

答案 1 :(得分:5)

还有另一种方法。这个方法详细here,将加法和减法的乘法量减半。你可能想要显示第一个方法,如果你能理解它,那么显示的第二个方法是一个有趣的读物。