我的目標是特別大的數值,其因子可以找到例如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