Я написал простое правое сито (неограниченное сито Eratosthenes) с использованием Python, но по какой-то причине он работает неправильно. Вот сито:Создание простого простого сита в Python
from itertools import count
def sieve():
nums = count(2)
while True:
n = next(nums)
nums = filter(lambda k: k%n != 0, nums)
yield n
К сожалению, это не работает. Вместо этого он просто возвращает те же значения, что и итератор count (2).
Для сравнения, это:
nums = count(2)
print(next(nums))
nums = filter(lambda k: k%2 != 0, nums)
print(next(nums))
nums = filter(lambda k: k%2 != 0, nums)
print(next(nums))
напечатает:
2
3
5
в то время как функция решето будет печатать:
Я думал, что вопрос был с странным поведением ягненка Питона а, но заменяя эту линию:
nums = filter(lambda k: k%n != 0, nums)
с:
def f(k): return k%n != 0
nums = filter(f, nums)
не решает проблему.
[Это не сито Эратосфена.] (Https://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf) – Veedrac
Действительно интересная статья, спасибо! – IncongruentModulo1