项目Euler Python

时间:2015-02-09 19:40:50

标签: python-2.7

嘿所以我正在研究Project Euler问题。我遇到问题1,由于某种原因,我得到了错误的答案。我不知道我的数学逻辑是否是问题,或者代码的逻辑是否错误。这是代码:

def getSumMult3_5(n):
    count = 0
    i = 0
    i_1 = 0
    while i*5 < n:
        count += i*5
        i += 1
    while i_1*3 < n:
        count += i_1*3
        i_1 += 1
    return count

print getSumMult3_5(1000)

它返回的计数= 266333,但这不是正确的答案。伯爵应该等于233168.任何人都可以帮我弄清楚它为什么这样做?

谢谢!

3 个答案:

答案 0 :(得分:2)

你重复计算的数字是5和3的倍数,例如15。

答案 1 :(得分:0)

您正在对15的倍数进行两次计数。您可以通过引入第三个while语句来解决此问题,即对15的每个倍数将计数减少1。

我建议使用if / else语句:

def getSumMult3_5(n):
  s = 0
  for i in range(1, n+1):
    if i%3==0:
      s+=i
    elif i%5==0:
      s+=i
  return s

print getSumMult3_5(1000)

这是因为 if 这个数字是3的倍数,所以不检查它是否是5的倍数;如果它不是3的倍数,则检查它是否是5的倍数。

我还建议使用 s 作为变量名,因为它表示sum,因为它是关键字,所以不能使用。 Count 似乎是指某事发生的次数。

仅使用一个变量并使用if / else语句,执行时间将减少,并且读取时的混乱也将减少。

祝你好运!

答案 2 :(得分:0)

这是我的代码:

running_sum = 0





for i in range(1,1000):
    if i % 3 == 0:
      running_sum+=(i) 
      
    elif i % 5 == 0:
      running_sum+=(i)
print running_sum
  

您正在对15之类的数字进行重复计算,这是两者的倍数