2014-09-20 21 views
-1

我的目标是特别大的数值,其因子可以找到例如12345678 !.即使在python中使用math.factorial(12345678)也需要很多时间来计算这样一个数的阶乘。在python中找到大数的阶乘的确切值的最快方法是什么?

我试过斯特林的Appoximation计算相同,但它没有给出确切的值。有没有其他方法来计算相同的?

EDIT 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的阶乘尾随零预览:我刚发现瓶颈是分割工序。

+0

在我的(不是特别快)机器上计算'math.factorial(12345)'需要大约6毫秒。 “很多时间”是什么意思? – 2014-09-20 09:24:20

+0

我应该注意到Python 3(至少Python 3.2及更高版本)使用比Python 2.x更好的算法。但是我仍然在Python 2上得到不到0.1秒的时间。你使用的是什么Python版本? – 2014-09-20 09:30:53

+0

你的算法很差。这不是'factorial'的问题。 – simonzack 2014-09-20 09:46:16

回答

1

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

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

自己试了一下,不到一秒钟。

但尝试math.factorial(12345)它也需要一秒钟。你自己试过这个吗?

+1

有趣的是,在我的机器上(在Python 3.4下),SciPy的版本大约比数学模块版本慢7倍。 – 2014-09-20 09:33:54

+0

我不使用SciPy(AFAIK :)),但[mpmath](https://mpmath.googlecode.com/svn/trunk/doc/build/functions/gamma.html)可以完成_ginormous_阶乘因子,近似。 – 2014-09-20 12:27:51

相关问题