【发布时间】:2017-01-16 21:15:27
【问题描述】:
我正在尝试编写一个素数筛生成器,将其转换为打印列表,然后打印给定范围内的素数。我很确定我的对数是正确的,但由于某种原因,我在非素数的素数列表中得到了一些额外的值。 (我立即发现了这一点,因为我在输出中的最后一个值是 3599,它不是素数)。 我不确定我是否有某种逻辑错误,所以任何帮助都会很棒
def sieve(n):
a = [True] * (n)
a[0] = a[1] = False
for (i, isPrime) in enumerate(a):
if isPrime:
yield i
for n in range(i*i, n, i):
a[n] = False
def pairs(li):
pair = 0
for i, x in enumerate(li):
if i < len(li)-1:
if li[i] + 2 == li[i+1]:
pair += 1
return pair
p_3600 = list(sieve(3600))
ans = [vals for vals in p_3600 if vals > 1600]
print ans
print "pairs:", pairs(ans)
【问题讨论】:
-
@Jean-FrançoisFabre 是的,你是对的,很抱歉。我只是在搞乱界限,看看我是否能弄清楚为什么我会得到一些额外的数字。那应该是n。
标签: python primes sieve-of-eratosthenes sieve