Python OverflowError: ne peut pas être "long" dans un index=taille entier

Je veux générer deux très grands nombres premiers en utilisant un algorithme que j'ai trouvé en ligne et légèrement modifiée.

J'ai cette erreur à la ligne 5:

Python OverflowError: cannot fit 'long' into an index=sized integer 

Mon code:

import math
def atkin(end):  
    if end < 2: return []  
    lng = ((end/2)-1+end%2)   
    **sieve = [True]*(lng+1)**  
    for i in range(int(math.sqrt(end)) >> 1):
        if not sieve[i]: continue  
        for j in range( (i*(i + 3) << 1) + 3, lng, (i << 1) + 3):  
            sieve[j] = False  
    primes = [2]  
    primes.extend([(i << 1) + 3 for i in range(lng) if sieve[i]])  
    return primes

Comment puis-je réparer mon erreur?

Si vous connaissez un meilleur moyen de générer de grands nombres premiers, qui pourrait être utile aussi.

Avez-vous essayé ce code pour de petits nombres? Si vous souhaitez utiliser les grands nombres, vous devriez essayer de gmplib.org de la bibliothèque. Il y a un Python wrappers pour cette bibliothèque et il a bien fonctionné pour moi.
Ouais le code fonctionne très bien pour les petits nombres. J'ai vérifié les nombres premiers entre 1 et 100 et c'était correct. Merci pour le lien, si, je vais vérifier.
Il y a un certain nombre de façons d'obtenir de plus grands nombres premiers rapidement à l'aide de cet algorithme discuté ici: stackoverflow.com/questions/2897297/...

OriginalL'auteur Rell3oT | 2011-01-20