Peneira de Eratóstenes - Primos entre X e N

Eu encontrei essa implementação altamente otimizada da Peneira de Eratóstenes para Python no Stack Overflow. Eu tenho uma idéia aproximada do que está fazendo, mas devo admitir que os detalhes de seu funcionamento me escapam.

Ainda gostaria de usá-lo para um pequeno projeto (sei que existem bibliotecas para fazer isso, mas gostaria de usar essa função).

Aqui está o 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]

O que estou tentando alcançar é modificá-lo para retornar todos os números primos abaixon Começando às x de modo a:

primes = sieve(50, 100)

retornaria primos entre 50 e 100. Issoparecia fácil, tentei substituir essas duas linhas:

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

Mas por um motivo que não sei explicar, o valor dex acima não tem influência na matriz numpy retornada!

Como posso modificarsieve() parasó retornar números primos entrex en

questionAnswers(2)

yourAnswerToTheQuestion