3和5的倍数|将倍数附加到列表

时间:2015-07-09 20:11:59

标签: python

我已经学习Python不到一个月了,目前正在开发Project Euler。

具有讽刺意味的是,我坚持第一个问题。看看下面我的应用程序道路,我希望得到一些输入,我搞砸了。或使用错误的逻辑。

  
    

如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.

  
     

查找低于1000的3或5的所有倍数的总和。

我的逻辑/代码流

sum = multiple_three + multiple_five
multiple_three = []
multiple_five = []

def multiple_three(bignumber):
    for number in range(bignumber):
        if number % 3 == 0:
            multiple_three.append(number)

def multiple_five(bignumber):
    for number in range(bignumber):
        if number % 5 == 0:
            multiple_five.append(number)

bignumber = 1000
multiple_five(bignumber)
multiple_three(bignumber)

print multiple_three
print multiple_five

3 个答案:

答案 0 :(得分:1)

这对我有用。让我知道它是否适合你。

def multiples_of_3_or_5():
    for number in xrange(1000):
        if not number % 3 or not number % 5:
            yield number

print sum(multiples_of_3_or_5())

答案 1 :(得分:1)

让我们看看。

我们可以从范围有一个步骤参数的事实开始。因此range(0,10,3)之类的内容会让您0,3,6,9

所以,首先,我们有

sum(range(0,1000,3)) + sum(range(0,1000,5))

但是等等!被15整除的数字可以被5和3整除!我们算两次吧!呃,呃,让我们把它们减去

sum(range(0,1000,3)) + sum(range(0,1000,5)) - sum(range(0,1000,15))

坎。我想我们在这里仍然缺少一些东西。是否有更简单的方法将算术级数加在一起?可以宣誓有......

类似于(a_0 + a_n)* n / 2,其中n是术语的数量,也许......

def sum_of_arithmetic_progression(start,stop,step):
    n = (stop-start)//step #floor division :P
    end = start + step*n
    return (start + end)*n/2.0

sum_of_arithmetic_progression(0,1000,3)+sum_of_arithmetic_progression(0,1000,5)-sum_of_arithmetic_progression(0,1000,15)

答案 2 :(得分:0)

你不打印金额。但除此之外,你计算的数字是15次两次,即3的倍数和5。

是一个快速的解决方案
 print(sum(set(multiple_three+multiple_five)))

这里multiple_three + multiple_five给出了一个连接列表。 set标识唯一元素,sum将输出总和。更好的方法是使用"或"运算符,并将数字附加到@Destry Amiott建议的单个循环中。