【问题标题】:The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million10以下的素数之和为2 + 3 + 5 + 7 = 17。求200万以下的所有素数之和
【发布时间】:2020-08-02 12:14:42
【问题描述】:
sum_ans=17
for i in range(11,2000000):
    for j in range(2,int(i**0.5)):
        if i%j==0:
            break
    else:
        sum_ans+=i
print(sum_ans)

我返回的代码给出了答案 143064094781,正确答案是 142913828922,但我不知道我哪里出错了。所以谁能帮帮我。

【问题讨论】:

  • 我认为 i**0.5 + 1 应该可以完成这项工作,因为 range() 的第二个参数是独占的。
  • 您的17 包括 2,这是唯一的偶数。这意味着您只需要尝试iodd: 11, 13, 15, ... 因为所有大于 11 的偶数都是合数。鉴于i 是奇数,无需测试j == 2;从 3 开始,再次只使用奇数:3、5、7、9、...

标签: python-3.x primes


【解决方案1】:

Range's stop parameter is exclusive。这意味着您的代码仅计算 j 从 2 到 1 小于 i**0.5。要解决此问题,您可以添加 1,这意味着您的结束代码看起来有点像这样,提供正确的输出 142913828922:

sum_ans=17
for i in range(11,2000000):
    for j in range(2,int(i**0.5+1)):
        if i%j==0:
            break
    else:
        sum_ans+=i
print(sum_ans)

【讨论】:

【解决方案2】:

这个怎么样:

def isPrime(x):
    prime = True
    for i in range(2, x):
        if x % i == 0:
            prime = False
            break
        else:
            continue
    return prime

primes = (a for a in range(2, 2000000) if isPrime(a))
print(sum(primes))
# output
142913828922

此代码将需要几分钟才能执行。系好安全带!!

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 2013-05-15
    • 2013-05-28
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多