求和一系列数字

时间:2013-10-16 12:43:59

标签: python math sum sequence series

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

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

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

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

由于

5 个答案:

答案 0 :(得分:4)

如果奇数,请汇总ab之间的所有数字。

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

答案 1 :(得分:3)

一个相当快速的方法是:

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

答案 2 :(得分:1)

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

high = b
low = a

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

num_pairs = (high-low) // 2

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

result = (high + low) * num_pairs

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

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答案,以便有人可以编辑,如果我的数学很乱。

答案 3 :(得分: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 =((1 - a)/ 2)+ 1

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

答案 4 :(得分: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)