Ich schrieb ein einfaches Primzahlsieb (ein unbegrenztes Sieb von Eratosthenes) mit Python, aber aus irgendeinem Grund funktioniert es nicht richtig. Hier ist das Sieb:Erstellen eines einfachen Primzahlsiebs in 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
Leider funktioniert das nicht. Stattdessen gibt es nur die gleichen Werte zurück wie der count (2) Iterator.
Zum Vergleich dazu:
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))
gedruckt wird:
2
3
5
während das Sieb Funktion gedruckt wird:
Ich dachte, das Thema war mit dem seltsamen Verhalten von Pythons Lambd ein, wobei jedoch diese Zeile:
nums = filter(lambda k: k%n != 0, nums)
mit:
def f(k): return k%n != 0
nums = filter(f, nums)
das Problem nicht lösen.
[Das ist kein Sieb von Eratosthenes.] (Https://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf) – Veedrac
Wirklich interessantes Papier, danke! – IncongruentModulo1