编者这里就利用python解决一些数学问题,解决方法不只一个,如果有想法的小伙伴欢迎评论,如果觉得不错,欢迎点赞,关注,收藏哦(^▽ ^)
一、问题描述
如果我们列出10以内所有3或5的倍数,我们将得到3、5、6和9,这些数的和是23。
求1000以内所有3或5的倍数的和。
二、问题解决
通过从0-999进行列举,判断每一个数是否能被3或5整除,如果可以,则相加。
程序如下,:
sum = 0
len = int(input('please int a num:'))
for i in range(len):
if i % 3 == 0 or i % 5 == 0:
print(i)
sum += i
print('sum:', sum)
我们先利用10以内的数进行验证,可以看到成功打印出了10以内所有3或5的倍数,并且得到了正确的和
please int a num:10
0
3
5
6
9
sum: 23
因此我们可以得出答案为:233168
三、更高效的解决方案
上述方法的确可以成功解决问题,但是,如果我们要求的数非常大,如 ,这样,程序可能要列举一段时间才能得到结果。
以1000以内的数,我们观察其规律能够得出:
3的倍数之和:3+6+9+12+…+999=3*(1+2+3+4+…+333)
5的倍数之和:5+10+15+…+995=5*(1+2+…+199)
而等式右边我们可以利用求和公式求出结果
在本题目中,
,而
等于1000整除3(5)。在python中整除可以用//
表示。
这里要注意的一点就是,15同时是3和5的倍数,因此,如果我们将3的倍数之和与5的倍数之和相加,实际上是将15的倍数之和加了2次(这里有点拗口,大家细细品味一下)。
最终,我们可以将程序变为这个样子:
len = int(input('please input a num:'))
def sum(multiples):
n = (len-1) // multiples
return multiples*(n*(n+1)) // 2
result = sum(3) + sum(5) - sum(15)
print(result)
我们同样能够的到相同的答案
please input a num:1000
233168