Python中的质数

3 投票
2 回答
992 浏览
提问于 2025-04-17 10:29

我在尝试写一个程序,目的是显示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)

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

2 个回答

1
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)] 

注意:在Python 3.x版本中,range() 返回的是一个 range 对象,而不是一个 list(列表),所以你需要把

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

改成

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

以避免出现 TypeError 错误。

3

有两点需要注意:

(1) 你一开始不需要把liste设置为[2];因为你的primeCandidate循环已经包含了2,如果这样做的话,2会被计算两次。

(2) 你的“if isPrime”这一层次有点深了。只有在检查完候选的除数后,你才能相信isPrime的结果。(其实你检查的内容比需要的多,但这只是效率问题,不算是错误。)具体来说:

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)

撰写回答