获得阶乘和的最有效方法是什么?

时间:2019-01-27 06:29:39

标签: python

代码是在数组中查找每个值的阶乘,然后将它们的总和求和。示例为[1,2,3,4],则为1!+2!+ +3!+4!= 33。等于期望总和的单个整数,以模为底降低。问题是,当涉及大量数字(仅根据我的假设)时,结果为“由于超时而终止”

起初,我使用for循环遍历数组中的每个值。认为这可能是我在范围内使用的搜索问题,以确保它具有设定的范围。可悲的是,这仍然没有解决问题。我现在认为乘数一定是个问题,因为乘法是

def factModSum(arr):
    sum=0
    for i in range (0,len(arr)):
        sum=sum+factorial(arr[i])

    return sum%(10**9)

示例1:

Input: 1 2 3 4
output: 33
Expected output: 33

示例2:

Input:2 3 5 7
Output:5168
Expected output: 33

示例3:

Input:12 13 14
Output:884313600
Expected output: 33

该函数的核心功能。但是我在某些测试用例中遇到超时错误,因此假设代码无法在给定时间内处理大量数字

1 个答案:

答案 0 :(得分:1)

如果您要通过10 ** 9进行改装,则可以尝试以下操作:

def factModSum(arr):
    return sum(factorial(i) for i in arr if i < 40) % 10**9

这是因为n!n >= 40等同于0 mod 10**9