Python 阶乘大数

Python 阶乘大数,python,factorial,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 &

我正试图做一个程序,可以计算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))
def范围_产品(低、高):
如果lo+1
您可以使用内置的
math.factorial

import math
math.factorial(n)
或者您可以使用
reduce
函数来计算阶乘

from operator import mul
对于Python 2.7

对于Python 3


您可以使用内置的
math.factorial

import math
math.factorial(n)
或者您可以使用
reduce
函数来计算阶乘

from operator import mul
对于Python 2.7

对于Python 3


建议的方法将需要很长的时间来计算。例如,如果您不介意丢失一些精度,可以使用LogGamma函数快速获得近似值

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

scipy.special.gammaln(987654322)
=> 19467499583.824226
所以
987654321
大约为
exp(19467499583.824226)
您可以转换为
log 10
base以查找位数


它将有超过80亿位数。

建议的方法将需要很长时间来计算。例如,如果您不介意丢失一些精度,可以使用LogGamma函数快速获得近似值

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

scipy.special.gammaln(987654322)
=> 19467499583.824226
所以
987654321
大约为
exp(19467499583.824226)
您可以转换为
log 10
base以查找位数


另外,它将有超过80亿位数。

祝你好运
factorial(54321)
有233620个数字,计算大约需要一秒钟
factorial(654321)
几分钟后还没有返回。@MarkTolonen你说得对,但我找不到更快的方法来查找大数的阶乘。然而,在某些情况下,即使涉及阶乘,也确实不需要计算此值。e、 g.在组合公式中,涉及三个阶乘
nCr=n!/((n-r)!*r!)
因此,如果你想计算2与1000项的组合,你只需要两次乘法,而不是所有三个阶乘,然后是除法和乘法。但这不是问题所在。@MarkTolonen你是正确的。问题是关于一个大数的阶乘,但并没有提到有时间限制。依我看,我们不能比这更快地找到精确的阶乘值,但是,我们可以找到近似值。祝你好运
factorial(54321)
有233620个数字,计算大约需要一秒钟
factorial(654321)
几分钟后还没有返回。@MarkTolonen你说得对,但我找不到更快的方法来查找大数的阶乘。然而,在某些情况下,即使涉及阶乘,也确实不需要计算此值。e、 g.在组合公式中,涉及三个阶乘
nCr=n!/((n-r)!*r!)
因此,如果你想计算2与1000项的组合,你只需要两次乘法,而不是所有三个阶乘,然后是除法和乘法。但这不是问题所在。@MarkTolonen你是正确的。问题是关于一个大数的阶乘,但并没有提到有时间限制。依我看,我们不能比这个更快地找到精确的阶乘值,然而,我们可以找到这个数字非常大的近似值。取而代之的是阶乘(54321)。看看这个数字有多大。改为拍摄阶乘(54321)。请参阅