Я пытаюсь написать генератор простого сита, который я преобразовываю в список для печати, а затем печатаю простые числа в заданном диапазоне. Я почти уверен, что мое количество пар правильное, но по какой-то причине я получаю дополнительные значения в моем списке простых чисел, которые не являются простыми. (Я сразу уловил это, потому что мое последнее значение в выводе было 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)