首页 > 解决方案 > 嘿,有人可以帮我找出解决欧拉问题 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------")

谢谢您的帮助。

标签: pythonoptimization

解决方案


存在逻辑错误。您想打印从 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

推荐阅读