我试图编写一个程序,显示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)
但我的输出总是错误的。我找不到自己的错误。你能帮我找错吗?
答案 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
。