python-3.x 查找1000以下的3或5的倍数

hgqdbh6s  于 2023-01-10  发布在  Python
关注(0)|答案(3)|浏览(264)

我刚刚开始尝试我的手在项目欧拉的问题,我已经陷入了第一个代码本身。谁能告诉我,在下面的代码我哪里出错了。
问题陈述如下:
如果我们列出所有10以下的3或5的倍数的自然数,我们得到3、5、6和9。这些倍数之和是23。
求1000以下所有3或5的倍数之和。
我的解决方案如下:

multiple1 = 5
multiple2 = 3
index = 2
sum = 0
while multiple1 < 1000 or multiple2 < 1000:
    if multiple1 < 1000:
        sum = sum + multiple1
        multiple1 = 5 * index
    if multiple2 < 1000:
        sum = sum + multiple2
        multiple2 = 3 * index
    index = index + 1
    
print (sum)

我知道有人已经在某个地方发布了解决方案,但我只是想找出我在逻辑上哪里出错了。

vatpfxk5

vatpfxk51#

您的代码将生成重复值。例如,15是3和5的倍数。因此,每当某个数字是3和5的倍数时,您就会将重复值添加到总和中。下面的代码解决了您的问题。

multiple1 = 5
multiple2 = 3
index = 1
sum = 0
while multiple1 < 1000 or multiple2 < 1000:
    multiple1 = 5 * index
    multiple2 = 3 * index
    if (multiple1 < 1000) and (multiple1 % 3 != 0):
        sum = sum + multiple1
    if (multiple2 < 1000):
        sum = sum + multiple2
    index = index + 1
print (sum)
dced5bon

dced5bon2#

最简单的方法是

total = 0
for i in range(1,1000):
    if i%3 == 0 or i % 5 == 0:
       total += i
print(total)
iecba09b

iecba09b3#

你也可以不用循环

n=1000
remider=(n+2)//3 #get the reminder of 3  
remider2=(n+4)//5 #get the reminder of 5  
fsum = 3*((remider-1)*(remider))/2 #3*(N*(N+1)/2))  
ssum = 5*((remider2*(remider2-1))/2) #5*(N*(N+1)/2))  
first_list = list(range(3,3*(remider),3)) #list of mutiple of 3  
second_list = list(range(5,5*(remider2),5)) #list of mutiple of 5  
c_sum=sum(list(set(second_list) & set(first_list))) # sum of common elements  
print(fsum+ssum-c_sum)

相关问题