Project Euler 的 3 和 5 的倍数

我只是试图解决Project Euler 中的问题 1,但我不明白为什么这段代码不起作用并且输出答案是错误的。

问题- 如果我们列出所有低于 10 且是 3 或 5 的倍数的自然数,我们得到 3、5、6 和 9。这些倍数之和为 23。

求 1000 以下所有 3 或 5 的倍数之和.

正确答案 =233168

我的输出 =266333


a = 0

for x in range(0,1000,3):

    a = a + x

for x in range(0,1000,5):

    a = a + x

print(a) 


湖上湖
浏览 103回答 3
3回答

慕田峪4524236

欧拉计划 #1def f(x):                                   n1, n2, n3 = x//3, x//5, x//15    return 3*(n1)*(n1+1)//2+5*(n2)*(n2+1)//2-15*(n3)*(n3+1)//2for i in range(int(input())):                      print(f(int(input())-1))这里x//3给出了int(x/3)类似的 forx//5和x//15作为LCM(3,5)=15Σi = n(n+1)/2答案= 3 的倍数之和 + 5 的倍数之和 - 15 的倍数之和。对应于 ProjectEulerProblem #1 的解决方案注意:我在 StackOverflow 上分享代码的目的是让人们知道给定问题可以通过多种方式解决。由于 timeError,一个人总是很难通过所有案例。不要用作答案,但要学习。

慕的地8271018

您多算了 15 的倍数。解决此问题的一种方法是只使用一个循环来检查数字是 3 还是 5 的倍数。solution = 0for i in range(1000):    if i % 3 == 0 or i % 5 == 0:        solution += iprint(solution)

互换的青春

Devesh Kumar Singh的评论解决了这个问题:因为您将 3 和 5 的倍数计算两次,例如15. 添加一个循环来减去这些值,例如for x in range(0,1000,15): a = a - x
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python