我的目标是特别大的数值,其因子可以找到例如12345678 !.即使在python中使用math.factorial(12345678)
也需要很多时间来计算这样一个数的阶乘。在python中找到大数的阶乘的确切值的最快方法是什么?
我试过斯特林的Appoximation计算相同,但它没有给出确切的值。有没有其他方法来计算相同的?
EDIT 1:这是代码的我试图计算在数量
import math
def main():
total_cases = int(eval(raw_input()))
for case in xrange(total_cases):
number = int(eval(raw_input()))
if number >= 1e9:
break
factorial_n = math.factorial(number)
count = 0
for i in xrange(1, number):
temp = 10**i
if factorial_n % temp == 0 :
count += 1
else:
print count
break
main()
编辑2的阶乘尾随零预览:我刚发现瓶颈是分割工序。
在我的(不是特别快)机器上计算'math.factorial(12345)'需要大约6毫秒。 “很多时间”是什么意思? – 2014-09-20 09:24:20
我应该注意到Python 3(至少Python 3.2及更高版本)使用比Python 2.x更好的算法。但是我仍然在Python 2上得到不到0.1秒的时间。你使用的是什么Python版本? – 2014-09-20 09:30:53
你的算法很差。这不是'factorial'的问题。 – simonzack 2014-09-20 09:46:16