求和一系列数字

问题描述 投票:1回答:5

给定:两个正整数a和b(a

返回:从a到b的所有奇数整数的总和,包括。

    #My code: 
    a = 100
    b = 200
    for i in range(a,b):
        if i%2 == 1:
            print i

目前它只是显示所有奇数整数的下拉列表。如果需要,我不知道如何恰当地贴上“范围”。如何添加上面的代码以获得所有奇数整数的总和?

谢谢

python math sum sequence series
5个回答
3
投票

一个相当快速的方法是:

result = 0
for i in range(a,b+1):
  if i%2 == 1:
    result += i
print result

4
投票

如果奇数,将ab之间的所有数字相加。

sum(i for i in xrange(a, b) if i%2)

1
投票

有很多方法可以做到这一点。但是,如果你考虑数学,那就像Gauss's old problem一样。高斯被要求添加1到100之间的数字,他意识到每对高和低值总和为101(100 + 1,99 + 2,98 + 3 ...)

high = b
low = a

所以我们必须乘以一些b + a值。那里有多少?对于所有整数,这只是

num_pairs = (high-low) // 2

然后我们将该数字乘以high + low得到答案:

result = (high + low) * num_pairs

但是你只想要其他所有的,所以我们再次除以2:

result //= 2

完全:

def sumrange(low, high, step):
     num_pairs = (high - low) // 2
     result = (high + low) * num_pairs
     return result // step

或者sumrange = lambda low, high, step: (high - low) * (high + low) // (2 * step)

现在这仍然不是你的问题的答案,因为它需要被偏移,这取决于你的低值是否是奇数,以及你的高值是包含还是排除。但我会把它作为一种练习。

将此作为CW答案,以便有人可以编辑我的数学是否混乱。


0
投票

一些数学技巧可以非常有效地解决您的问题。

例如,前n个奇数的和= n * n square(n)

所以你可以使用

奇数之和[m,n] = n * n - (m-2)*(m-2)where m!=1m and n are odds

另一个有用的分析是AP(算术级数)

公式:(n / 2)*(a + l)where n= no. of elements, a = first term, l= last term

这里,

a = m [如果m是奇数]

a = m + 1 [如果m是偶数]

l = n [如果n是奇数]

l = n-1 [如果n是偶数]

n =((l - a)/ 2)+ 1

通过应用代码,您可以轻松获得答案......


0
投票

以及该解决方案的numpy版本:

import numpy as np
a = 100
b = 200
r = np.linspace(a,b-1,b-a)
r = np.sum(np.mod(r,2)*r)
print(r)
© www.soinside.com 2019 - 2024. All rights reserved.