我的目标是寻找特别大的数字值,例如12345678!甚至python中的math.factorial(12345678)
也需要花费大量时间来计算这样一个数字的阶乘。
我尝试过Stirling的Appoximation来计算相同的但是没有给出确切的值。有没有其他方法来计算相同的?
编辑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:我刚发现瓶颈是分裂步骤。
答案 0 :(得分:1)
scipy
对近似值和精确值都有快速C实现。
scipy.misc.factorial(12345, exact=True)
自己试了一下,不到一秒钟。
但是在尝试math.factorial(12345)
时,它还需要不到一秒钟。你自己试过吗?
答案 1 :(得分:0)
def factorial(n):
result = 1
for i in range (1, (n +1)):
result = i * result
return result
print (factorial (100))
这段代码使用 range 函数和 for 循环计算一个数的阶乘。