Сито Эратосфена - простые числа между X и N

Я нашел эту высоко оптимизированную реализацию Sieve of Eratosthenes для Python при переполнении стека. У меня есть приблизительное представление о том, что он делает, но я должен признать, что детали его работы ускользают от меня.

Я все еще хотел бы использовать его для небольшого проекта (я знаю, что для этого есть библиотеки, но я бы хотел использовать эту функцию).

Вот оригинал:

'''
    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]

То, что я пытаюсь достичь, это изменить его так, чтобы он возвращал все простые числа нижеn начинается с x чтобы:

primes = sieve(50, 100)

будет возвращать простые числа от 50 до 100. Этоказалось достаточно просто, я попытался заменить эти две строки:

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

Но по причине, которую я не могу объяснить, ценностьx в вышесказанном не имеет никакого влияния на возвращаемый массив numpy!

Как я могу изменитьsieve() втолько вернуть простые числа междуx а такжеn

Ответы на вопрос(2)

Ваш ответ на вопрос