【发布时间】:2016-12-16 20:32:01
【问题描述】:
我很好奇,并将越来越大的阶乘作为阶乘插入到 wolfram alpha 中。例如,I calculated 10,000!。这是2.846... x 10<sup>35659</sup>!
我检查了他们的代码解释,似乎他们将所有整数存储在一个数组中,并对它们执行某种算法。我很好奇是否有人可以扩展这是什么算法,或者它的代码或伪代码实现是什么样的。
【问题讨论】:
-
只是从
1到10000和BigInteger的循环计算70 毫秒的阶乘;但是这种幼稚的方法不适用于100000!(大约需要 10 秒) -
我不知道他们使用的是哪种算法,但您可以使用基于素数的算法:10! = 3628800 = 2^(10 / 2 + 10 / 4 + 10 / 8) * 3^(10 / 3 + 10 / 9) * 5^(10 / 5) * 7^(10 / 7) = 2^8 * 3^4 * 5^2 * 7
-
大概是分治和一些有效的乘法。问题也很容易并行化,结果真的不大
-
只有 10,000 次乘法,但相乘的数字是巨大的。他们可能使用the Karatsuba algorithm 或类似的东西。
标签: algorithm calculator factorial