Python中的Prime数字

时间:2012-01-18 03:48:40

标签: python primes

我试图编写一个程序,显示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 个答案:

答案 0 :(得分:3)

有两件事情飞跃:

(1)你不需要在开始时设置监听[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)

答案 1 :(得分: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