一点数学和逻辑

Fab*_*ook 3 python math logic

所以这里有这个问题:

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

我在这里写了这个:

def multiples(num, below):
    counter = 1
    z = 0
    while True:
        x = num * counter
        if x < below:
            z += x
        else:
            break
        counter += 1
    return z
below = 1000
print "Multiples of 3: " + str(multiples(3, below))
print "Multiples of 5: " + str(multiples(5, below))
print "Added: " + str(multiples(3, below) + multiples(5, below))
Run Code Online (Sandbox Code Playgroud)

如果我设置below为10,我会得到正确答案,23

Multiples of 3: 18
Multiples of 5: 5
Added: 23
Run Code Online (Sandbox Code Playgroud)

但当我将它设置为1000时,我得到了这个:

Multiples of 3: 166833
Multiples of 5: 99500
Added: 266333
Run Code Online (Sandbox Code Playgroud)

这应该是错的,有什么我没有得到的吗?

Roh*_*ain 7

实际上你需要在1000以下删除15的倍数,因为它将在3和5中重复.这不会发生在10以下..

Multiple of 3 & 5  = (multiple of 3 + multiple of 5 - multiple of 15)
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用a Set来存储这些倍数,以删除重复..