[英]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.