Я пытаюсь создать генератор простых чисел в одной строке Python, как веселое упражнение.
Следующий код работает так, как ожидалось, но он слишком медленный:
primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,i) for k in xrange(1,i)])
for i in primes(10):
print i,
Итак, я попытался сделать это, только проверив квадратный корень j и k:
primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,int(round(math.sqrt(i)+1))) for k in xrange(1,int(round(math.sqrt(i)+1)))])
for i in primes(10):
print i,
Но он выводит: 2 3 5 6 7 8
Таким образом, должно быть что-то не так с моими индексами j и k, но у меня нет подсказки.