计算器(如wolfram alpha)如何计算极大的阶乘?

时间:2016-12-16 20:32:01

标签: algorithm calculator factorial

我很好奇,并且将越来越多的因子插入到wolfram alpha中作为阶乘。例如,I calculated 10,000!。这是2.846... x 1035659

我检查了他们的代码解释,看起来他们将所有整数存储在一个数组中并对它们执行某种算法。我很好奇是否有人可以扩展这是什么算法,或者这个代码或伪代码的实现是什么样的。

1 个答案:

答案 0 :(得分:0)

对于大整数运算,目标是同时减少必须对大整数进行的运算次数,以及尽可能高效地执行基本运算(总和,除法,产品等)。

在阶乘的情况下,有许多可用的算法可以减少必须进行的乘法的数量(例如递归方法)。此外,乘法是使用可用的最佳算法完成的,按照增加的大小顺序通常是:

基本乘法 - > karatsuba - >汤姆库克 - > Schönhage-Strassen算法

一种算法比另一种算法变得更好的精确尺寸并不为人所知,并且通常对机器敏感。

据说这一切都有其局限性。这是(10 ^ i)时间的输出!在Mathematica中为i计算从1到8。

Table[Timing[(10^i)!][[1]], {i, 1, 8}]
{0.000011, 0.00002, 0.000028, 0.000911, 0.015209, 0.20903, 3.99917, 58.9894}

更新:正如我所怀疑的,Wolfram使用GMP进行一些大整数操作。

http://library.wolfram.com/infocenter/Conferences/7518/Macalester_talk.txt