为了账号安全,请及时绑定邮箱和手机立即绑定

Project Euler 的 3 和 5 的倍数

Project Euler 的 3 和 5 的倍数

湖上湖 2022-10-06 18:46:30
我只是试图解决Project Euler 中的问题 1,但我不明白为什么这段代码不起作用并且输出答案是错误的。问题- 如果我们列出所有低于 10 且是 3 或 5 的倍数的自然数,我们得到 3、5、6 和 9。这些倍数之和为 23。求 1000 以下所有 3 或 5 的倍数之和.正确答案 =233168我的输出 =266333a = 0for x in range(0,1000,3):    a = a + xfor x in range(0,1000,5):    a = a + xprint(a) 
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

欧拉计划 #1

def 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)//2

for i in range(int(input())):                  

    print(f(int(input())-1))

这里x//3给出了int(x/3)类似的 forx//5x//15

作为LCM(3,5)=15

Σi = n(n+1)/2

答案= 3 的倍数之和 + 5 的倍数之和 - 15 的倍数之和。

对应于 ProjectEulerProblem #1 的解决方案

  • 注意:我在 StackOverflow 上分享代码的目的是让人们知道给定问题可以通过多种方式解决。

    由于 timeError,一个人总是很难通过所有案例。

不要用作答案,但要学习。


查看完整回答
反对 回复 2022-10-06
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您多算了 15 的倍数。解决此问题的一种方法是只使用一个循环来检查数字是 3 还是 5 的倍数。


solution = 0

for i in range(1000):

    if i % 3 == 0 or i % 5 == 0:

        solution += i

print(solution)


查看完整回答
反对 回复 2022-10-06
?
互换的青春

TA贡献1797条经验 获得超6个赞

Devesh Kumar Singh评论解决了这个问题:

因为您将 3 和 5 的倍数计算两次,例如15. 添加一个循环来减去这些值,例如for x in range(0,1000,15): a = a - x


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信