在python中找到大数阶的精确值的最快方法是什么?

时间:2014-09-20 09:13:49

标签: python python-2.7 math

我的目标是寻找特别大的数字值,例如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:我刚发现瓶颈是分裂步骤。

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 循环计算一个数的阶乘。