Python中的质数

2024-09-30 16:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个程序,显示2到200之间的质数。在

这是我写的程序。在

liste = [ ]
liste.append(2)
liste = [2]

for primeCandidate in range (2,10):
    isPrime = True
    for divisor in range (2,primeCandidate):
        if primeCandidate % divisor == 0:
            isPrime = False
            break
        if isPrime:
            liste.append(primeCandidate)
            print(liste)

但我总是得到错误的输出。我找不到我的错误。你能帮我找出我的错误吗?在


Tags: in程序falsetrueforif错误range
2条回答

有两件事突然出现:

(1)您不需要在开始时将liste设置为[2];primeCandidate循环包含2,因此如果这样做,您将得到两次2。在

(2)你的“如果我是”太深了。只有在检查了候选除数后,才能信任isPrime。(好吧,你实际上检查得比你需要的多,但这只是一个效率问题,而不是一个bug。)具体来说:

liste = []
for primeCandidate in range (2,100):
    isPrime = True
    for divisor in range (2,primeCandidate):
        if primeCandidate % divisor == 0:
            isPrime = False
            break
    if isPrime:
        liste.append(primeCandidate)
        print(liste)
from math import sqrt


def isPrime(num) :
    if num in [2,  3 ] : return True
    elif num < 2: return False 
    for i in [2]  +  range(3, int(sqrt(num)),  2) :
        if not num % i: return False 
    return True 

liste = [i for i in range(2,  201) if isPrime(i)] 

注意:在python3.x中,range()返回一个range对象,而不是list,因此您必须更改

^{pr2}$

for i in [2] + list(range(3, int(sqrt(num)), 2)):

以避免产生{}。在

相关问题 更多 >