任务Project Euler #10是: 10以下素数的和是2+3+5+7= 17。找出两百万以下所有素数的和。
我被为什么我的代码给我一个错误的1000000000001答案弄糊涂了。这就是它:
def prime(a):
for i in range(2,a):
if a % i == 0:
return False
break
return True
sum = 2
for n in range(3,2000000,2):
if prime(n):
sum += n
print(sum)有人能给我解释一下它到底出了什么问题吗?
发布于 2019-06-13 16:08:13
您从for循环返回得太早了:
def prime(a):
if a < 2:
return False
if a == 2:
return True
for i in range(2,a):
if a % i == 0:
return False
# should be after checking all numbers
return True # this line此外,您只需要检查sqrt(a)和排除偶数。
import math
# skip even numbers
def prime(a):
if a == 2:
return True
if a % 2 == 0:
return False
n = math.ceil(math.sqrt(a))
for i in range(3, n+1, 2):
if a % i == 0:
return False
return True发布于 2019-06-13 17:06:49
从here复制@MrHIDEn解决方案
def get_primes(n):
m = n+1
numbers = [True] * m
for i in range(2, int(n**0.5 + 1)):
if numbers[i]:
for j in range(i*i, m, i):
numbers[j] = False
primes = []
for i in range(2, m):
if numbers[i]:
primes.append(i)
return primes
primes = get_primes(2000000)
print(sum(primes))输出
142913828922参考:Sieve_of_Eratosthenes此算法速度更快
https://stackoverflow.com/questions/56575967
复制相似问题