计算每个给定数字列表的奇数和

时间:2019-06-29 17:09:35

标签: python list

如何确定所有奇数正整数的总和,直到某个数字arr[i]。如果查询是arr=[4,5],则答案是1+3=4的{​​{1}}和arr[0]=4的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

不清楚为什么您需要定义列表arr=[4,5]

这个简单的lambda可以在任意正数下完成您的任务:

sum_odd_numbers = lambda num: sum(xrange(1, num + 1, 2))

# Examples
>>> lst = [4, 5]

>>> print sum_odd_numbers(lst[0])
# 4

>>> print sum_odd_numbers(lst[1])
# 9

答案 1 :(得分:1)

我们可以制作一个使用range(..)的简单实现,然后将其汇总,例如:

def f(n):
    return sum(range(1, n+1, 2))

,但是如果我们考虑将数字加在一起作为常数运算,则此运算将在 O(n)中运行。

这是arithmetic series [wiki]。如果 k k =⌊(n-1)/2⌋,则等于:

 k
---
\              (k+1) (2*k+2)        2
/    2*i + 1 = ------------- = (k+1)
---                 2            
i=0

所以我们可以简单地将其计算为:

def f(n):
    k1 = (n+1) // 2
    return k1 * k1

例如:

>>> f(4)  # 1 + 3
4
>>> f(5)  # 1 + 3 + 5
9
>>> f(10) # 1 + 3 + 5 + 7 + 9
25
>>> f(123456789)
3810394749276025