簡體   English   中英

階乘巨大數Python

[英]Factorial Huge Number Python

我正在嘗試制作一個可以計算987654321的階乘的程序,但是我找不到解決方法。

def range_prod(lo,hi):
    if lo+1 < hi:
        mid = (hi+lo)//2
        return range_prod(lo,mid) * range_prod(mid+1,hi)
    if lo == hi:
        return lo
    return lo*hi

def treefactorial(n):
    if n < 2:
        return 1
    return range_prod(1,n)
print(treefactorial(987654321))

所提出的方法將花費很長時間來計算。 如果可以接受一些精度,可以使用LogGamma函數快速獲得一個近似值,例如

math.exp(scipy.special.gammaln(3+1))
=> 6.0

scipy.special.gammaln(987654322)
=> 19467499583.824226

所以987654321! 大約是exp(19467499583.824226)您可以轉換為log 10底數來找到位數...

PS。 它將有超過80億個數字。

您可以使用內置的math.factorial

import math
math.factorial(n)

或者您可以使用reduce函數來計算階乘

from operator import mul

對於Python 2.7

factorial = lambda n: reduce(mul, xrange(1, n+1))

對於Python 3

factorial = lambda n: reduce(mul, range(1, n+1))

>>> factorial(987654321)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM