3 回答
TA贡献1875条经验 获得超5个赞
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//5
和x//15
作为LCM(3,5)=15
Σi = n(n+1)/2
答案= 3 的倍数之和 + 5 的倍数之和 - 15 的倍数之和。
对应于 ProjectEulerProblem #1 的解决方案
注意:我在 StackOverflow 上分享代码的目的是让人们知道给定问题可以通过多种方式解决。
由于 timeError,一个人总是很难通过所有案例。
不要用作答案,但要学习。
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)
TA贡献1797条经验 获得超6个赞
Devesh Kumar Singh的评论解决了这个问题:
因为您将 3 和 5 的倍数计算两次,例如
15
. 添加一个循环来减去这些值,例如for x in range(0,1000,15): a = a - x
添加回答
举报