可能更快的实施

时间:2018-05-08 00:57:51

标签: python

我目前正在www.codefights.com上进行每日挑战,但我无法通过一些测试。我的实现是正确的,它给出了正确的答案,但它需要太长时间。这是一个问题: -

写一个函数,计算在一个点上计算的多项式的n阶导数,模数为109 + 7.也就是说,输出应该在[0,109 + 7]范围内。

实施例 对于系数= [3,2,1,1],n = 2且x = 100,输出应为 nthDerivative(系数,n,x)= 602。 这里表示的多项式是f(x)= 3 + 2x + x2 + x3,其具有f'(x)= 2 + 6x的二阶导数。因此,答案是f'(100)= 602。

输入/输出

[执行时间限制] 4秒(py3)

[input] array.integer coefficient

多项式的系数,其中系数[i]是xi的系数。

保证约束: 0≤resystemsslength≤5000。

[输入]整数n

评估前的衍生品数量。

保证约束: 0≤n≤1000。

[输入]整数x

评估第n个导数的值。

保证约束: -1000≤x≤1000。

[输出]整数

由在x处评估的系数定义的多项式的n阶导数减去模数109 + 7.输出应在[0,109 + 7]范围内。

这是我的代码

def nthDerivative(coefficients, n, x):
    #creating a list that will hold the power of each element 

    power = list(range(0,len(coefficients)))
    #print(power)
    start=0
    while n != 0:
        for i in range(start,len(coefficients)):
            y= power[i]
            if(power[i] != 0):
                power[i] -=1
            coefficients[i] = coefficients[i]* y
        # print("Power")
        # print(power)
        # print("co")
        # print(coefficients)
        n -=1
        start+=1

    sum = 0
    # print(power)
    # print(coefficients)
    for i in range(start,len(coefficients)):
        sum += coefficients[i] * (x ** power[i])
    return sum % (10**9 +7)

1 个答案:

答案 0 :(得分:0)

这里可能有用的两个技巧是

  • 使用x ^ n计算x ^(n + 1),以避免多次计算x的大功率,
  • 在整个过程中,存储结果mod 10e9 + 7,以避免在你只关心它们的值mod 10e9 + 7时存储大量数字