[英]Sum of a sequence in Python
在深入编程方面之前,让我用数学符号展示我的问题。
令a_n
为其第i
项定义为i^2 - (i-1)^2
的序列。 很容易看出a_i = 2i-1
。 因此(用数学符号)我们有a_n = {2-1, 4-1, ..., 2n-1} = {1, 3, 5, ..., 2n -1}
,所有奇数的序列在[1, 2n]
范围内。
在 HacerRank 中,一个练习是定义一个 function 来计算总和S_n = a_1 + a_2 +... + a_n
,然后在等式S_n = x (mod 10^9 + 7)
中找到x
(仍然使用数学符号)。 因此,我们需要在mod 10^9 + 7
中找到2n
的所有奇数之和的等价性。
现在,go 进入编程方面,这是我尝试的:
def summingSeries(n):
# Firstly, an anonimous function computing the ith term in the sequence.
a_i = lambda i: 2*i - 1
# Now, let us sum all elements in the list consisting of
# every a_i for i in the range [1, n].
s_n = sum([a_i(x) for x in range(1, n + 1)])
# Lastly, return the required modulo.
return s_n % (10**9 + 7)
这个 function 通过了 HackerRank 中的一些测试,但不是所有测试。 但是,我不知道它可能有什么问题。 有什么线索吗?
提前致谢。
解决方案非常简单。 测试失败不是因为代码逻辑错误,而是因为计算时间太长。 观察到1 + 3 +... + 2n-1 = n^2
我们可以将 function 写成
def summingSeries(n):
return n**2 % (10**9 + 7)
这显然是一个重大的简化。 根据 HackerRank 的标准,运行时现在是可以接受的,并且所有测试都已通过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.