求和一系列数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求和一系列数字相关的知识,希望对你有一定的参考价值。
给定:两个正整数a和b(a
返回:从a到b的所有奇数整数的总和,包括。
#My code:
a = 100
b = 200
for i in range(a,b):
if i%2 == 1:
print i
目前它只是显示所有奇数整数的下拉列表。如果需要,我不知道如何恰当地贴上“范围”。如何添加上面的代码以获得所有奇数整数的总和?
谢谢
一个相当快速的方法是:
result = 0
for i in range(a,b+1):
if i%2 == 1:
result += i
print result
如果奇数,将a
和b
之间的所有数字相加。
sum(i for i in xrange(a, b) if i%2)
有很多方法可以做到这一点。但是,如果你考虑数学,那就像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答案,以便有人可以编辑我的数学是否混乱。
一些数学技巧可以非常有效地解决您的问题。
例如,前n个奇数的和= n * n square(n)
所以你可以使用
奇数之和[m,n] = n * n - (m-2)*(m-2)
where m!=1
和m 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
通过应用代码,您可以轻松获得答案......
以及该解决方案的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)
以上是关于求和一系列数字的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 598. 范围求和 II / 299. 猜数字游戏 / 488. 祖玛游戏