我发现此页面描述了许多用于计算阶乘的算法。不幸的是,解释很简洁,我不想逐行浏览源代码以了解算法背后的基本原理。
谁能指出我对这些(或其他快速的)用于计算阶乘的算法的更详细描述吗?
编辑: 此页面描述了质数分解的方法,这是所有性能最佳的因数算法所共有的技术。它还包含Python中一些不错的示例代码。作者链接到二进制拆分的描述,并引用了《 算法杂志 》上的一篇文章(“关于计算阶乘的复杂性”),如果我只能亲身体验的话,该文章看起来很有希望。
请查看Richard Fateman撰写的本文(PDF链接)。这些代码示例位于Lisp中,但是无论如何,大多数秘密归结为使您必须执行的bignum(任意精度整数)计算次数最少。
自然地,如果您不需要/有大数目,这是微不足道的。查找表或简单循环都可以。
编辑: 如果你可以使用一个大概的答案,您可以直接通过累加计算阶乘的对数log(k)的k = 2 ... n,或使用古老的斯特林近似。您想尽可能使用对数以避免溢出;尤其是,斯特林近似法的幼稚应用会在很多不必要的地方溢出。
log(k)
k = 2 ... n