繁体   English   中英

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

[英]What is the fastest way to find the exact value of the factorial of a large number in python?

我的目标是要找到阶乘的数字的特别大的值,例如 - 12345678!。 甚至 python 中的math.factorial(12345678)需要大量时间来计算这样一个数字的阶乘。

我尝试使用斯特林近似来计算相同的值,但它没有给出确切的值。 有没有其他方法可以计算相同的?

编辑 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:我刚刚发现瓶颈是分割步骤。

scipy对近似值和精确值都有一个快速的 C 实现。

scipy.misc.factorial(12345, exact=True)

我自己试过了,不到一秒钟。

但是在尝试math.factorial(12345)它也需要不到一秒钟的时间。 你自己试过这个吗?

    def factorial(n):
        result = 1
        for i in range (1, (n +1)):
            result = i * result
        return result
    
    print (factorial (100))

此代码使用范围函数和 for 循环计算数字的阶乘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM