Sieve of Eratosthenes - Primzahlen zwischen X und N

Ich fand diese hochoptimierte Implementierung des Sieve of Eratosthenes für Python on Stack Overflow. Ich habe eine ungefähre Vorstellung davon, was es tut, aber ich muss zugeben, dass mir die Details seiner Funktionsweise entgehen.

Ich würde es immer noch gerne für ein kleines Projekt verwenden (mir ist bewusst, dass es Bibliotheken gibt, die dies tun, aber ich möchte diese Funktion verwenden).

Hier ist das Original:

'''
    Sieve of Eratosthenes 
    Implementation by Robert William Hanks      
    https://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n/3035188
'''

def sieve(n):
    """Return an array of the primes below n."""
    prime = numpy.ones(n//3 + (n%6==2), dtype=numpy.bool)
    for i in range(3, int(n**.5) + 1, 3):
        if prime[i // 3]:
            p = (i + 1) | 1
            prime[       p*p//3     ::2*p] = False
            prime[p*(p-2*(i&1)+4)//3::2*p] = False
    result = (3 * prime.nonzero()[0] + 1) | 1
    result[0] = 3
    return numpy.r_[2,result]

Was ich versuche zu erreichen, ist es zu ändern, um alle Primzahlen unter @ zurückzugebn beginnt u x damit

primes = sieve(50, 100)

would Primzahlen zwischen 50 und 100 zurückgeben. Diese schien einfach genug, ich habe versucht, diese beiden Zeilen zu ersetzen:

def sieve(x, n):
    ...
    for i in range(x, int(n**.5) + 1, 3):
    ...

Aber aus einem Grund, den ich nicht erklären kann, ist der Wert vonx oben hat keinen Einfluss auf das zurückgegebene Numpy-Array!

Wie kann ich @ ändersieve() zunu return primes betweenx undn

Antworten auf die Frage(2)

Ihre Antwort auf die Frage