python - 嘿,有人可以帮我找出解决欧拉问题 50(连续素数)的代码有什么问题,它只适用于一百以下
问题描述
我有以下问题,我的代码成功生成了前 100 个素数,但之后不起作用。我不确定问题是什么。
a=0
def isprime(n):
prime=True
for i in range(2,int(n**0.5)+1):
if n%i==0:
prime=False
break
return prime
def irpb(x):
javab=True
for i in range(2,int(x**0.5)+1):
if x%i==0:
javab=False
break
return javab
for d in range(2,1*10**6):
if isprime(d):
#print("D is ",d)
a+=d
if irpb(a):
if a<1*10**6:
print(a)
print("------Finish------")
谢谢您的帮助。
解决方案
存在逻辑错误。您想打印从 1 到 N 的所有素数之和。很好。如果“N”是 10^6,那么从 1 到 N 的所有素数之和肯定大于 10^6。所以你的最后一个条件:
if a<1*10**6:
print(a)
当您输入一个范围时:
for d in range(2,1*10**6):
永远不会是真的。
这里有一个解决方案:
a=0
N=10^6
def isprime(n):
prime=True
for i in range(2,int(n**0.5)+1):
if n%i==0:
prime=False
break
return prime
for d in range(2,N):
if isprime(d):
print("D is ",d)
a+=d
if(N<=10^6)
print(a)
输出:
37550402023