因子巨大的数字Python

时间:2017-04-30 21:54:44

标签: python factorial

我正在尝试制作一个可以计算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))

2 个答案:

答案 0 :(得分:3)

建议的方法需要很长时间才能计算出来。如果你没有失去一些精度,你可以使用LogGamma函数快速得到一个近似值,例如

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

scipy.special.gammaln(987654322)
=> 19467499583.824226

所以987654321!约为exp(19467499583.824226),您可以转换为log 10基数来查找位数......

PS。它将拥有超过80亿的数字。

答案 1 :(得分:0)

您可以使用内置math.factorial

import math
math.factorial(n)

或者您可以使用reduce函数计算阶乘

from operator import mul
  

for Python 2.7

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

for Python 3

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

>>> factorial(987654321)