-3

我正在尝试解决Project Euler 的问题 10

10 以下的素数之和为 2 + 3 + 5 + 7 = 17。
求两百万以下的所有素数之和。

这是我写的代码:

import math
def is_prime(number):
  if number <= 1:
    return False
  if number == 2:
    return True
  for i in range(3,int(math.sqrt(number))+1):
    if number % i ==0:
      return False
  else:
    return True 
all_primes = []
def check_prime():
  count = 1
  while count<2000000:
    if is_prime(count) == True:
      all_primes.append(count)
    count += 2
check_prime()
print(sum(all_primes))

它给了我一个 142913828920 的答案,这是错误的,非常错误的。我究竟做错了什么?

4

2 回答 2

0

也许您应该使用 Eratosthenes 的筛子将您的方法更改为更简单的方法:

def primes(N):
    isPrime  = [True] * N
    if N>=3 : yield 2
    for p in range(3,N,2):
        if not isPrime[p]: continue
        isPrime[p*p::p] = [False] * len(isPrime[p*p::p])
        yield p

sum(primes(10)) # 17
于 2020-12-18T14:53:58.107 回答
0

代码中的逻辑缺陷。第 5、7 和 18 行几乎没有变化

  1 import math
  2 def is_prime(number):
  3   if number <= 1:
  4     return False
  5   if number in range(2,4):
  6     return True
  7   for i in range(2,int(math.sqrt(number))+1):
  8     if number % i ==0:
  9       return False
 10   else:
 11     return True
 12 all_primes = []
 13 def check_prime():
 14   count = 1
 15   while count<10:
 16     if is_prime(count) == True:
 17       all_primes.append(count)
 18     count = count + 1
 19 check_prime()
 20 print(sum(all_primes))
于 2020-12-18T13:38:16.177 回答