我正在用 Python 进行 Eratosthenes 的筛分实现。出现的问题不是所有素数都出现(主要是编号较低的素数)。
这是我的代码:
def prevPrimes(n):
from math import sqrt
from time import time
start = time()
if type(n) != int and type(n) != long:
raise TypeError("Arg (n) must be of <type 'int'> or <type 'long'>")
if n <= 2:
raise ValueError("Arg (n) must be at least 2")
limit, x, num, primes = sqrt(n), 2, {}, []
for i in range(1, n+1):
num[i] = True
while x < limit:
for i in num:
if i%x==0:
num[i] = False
x += 1
for i in num:
if num[i]:
primes.append(i)
end = time()
primes = sorted(primes)
print round((end - start), 2), ' seconds'
return primes
如果我输入>>> prevPrimes(1000)
,我希望结果以:[2, 3, 5, 7, 11, 13, 17]
等开头。但是,这就是它的样子:[1, 37, 41, 43, 47, #more numbers]
。
我知道问题在于它陈述了“原始”素数(2、3、5、7、11、13、17 等),False
因为我的程序检查素数的方式。我怎样才能避免这种情况?提前致谢 :)