générateur en Python générer des nombres premiers
J'ai besoin de générer des nombres premiers en utilisant le générateur en Python. Voici mon code:
def genPrimes():
yield 2
x=2
while True:
x+=1
for p in genPrimes():
if (x%p)==0:
break
else:
yield x
J'ai un RuntimeError: le maximum de la profondeur de récursion dépassé après la 2ème prime.next() quand je le lance.
Quel est exactement votre raison de vouloir utiliser la récursivité ici?
stackoverflow.com/questions/1628949/...
Voir le plus Rapide moyen de la liste de tous les nombres premiers en dessous de N en python
Voir ceci réponse efficace pour une premier générateur.
ou de ses amélioré, plus efficace variante.
stackoverflow.com/questions/1628949/...
Voir le plus Rapide moyen de la liste de tous les nombres premiers en dessous de N en python
Voir ceci réponse efficace pour une premier générateur.
ou de ses amélioré, plus efficace variante.
OriginalL'auteur user1347096 | 2013-03-29
Vous devez vous connecter pour publier un commentaire.
Le moyen le plus rapide pour générer des nombres premiers est avec un tamis. Ici, nous utilisons une segmentation Crible d'Eratosthène pour générer les nombres premiers, un par un, sans maximum, dans l'ordre;
ps
est la liste de tamisage nombres premiers inférieur au courant maximal etqs
est le décalage du plus petit multiple de l'correspondantps
dans le segment en cours.Un simple
isPrime
à l'aide de la section de première instance est suffisante car elle sera limitée à la quatrième racine de n. La taille du segment2 * delta
est arbitrairement fixée à 100000. Cette méthode nécessite O(sqrt n) de l'espace pour le tamisage de nombres premiers plus constante de l'espace pour le tamis.Il est plus lent mais permet d'économiser de l'espace pour générer candidat nombres premiers avec une roue et de tester les candidats pour la primalité avec un
isPrime
sur la base forte pseudoprime tests pour les bases 2, 7 et 61; ceci est valable pour 2^32.Si vous êtes intéressé par la programmation par les nombres premiers, j'ai modestement recommander cet essai à mon blog.
isSpsp
et leurs plages de validité? Où peut-on trouver? Merci.href="http://miller-rabin.appspot.com/" >miller-rabin.appspot.com
La "meilleure solution", est le plus petit nombre que les imbéciles le test. Par exemple, étant donné les trois premier set 2, 7, 61, le plus petit nombre composé que les rapports de test en tant que premier est 4759123141. Ou bien c'est le plus grand nombre qui ne veut pas tromper le test. J'ai oublié laquelle, mais il serait facile pour vous de vérifier. Charles Greathouse et Jeff Gilchrist ont aussi travaillé dans ce domaine, si vous voulez google pour leurs sites web, mais si vous voulez juste la réponse, la page est le plus simple endroit pour chercher.
merci! aussi trouvé le simple liste pour les "petits" nombres dans la page WP liés à partir de cette page, vous avez mentionné. 🙂
OriginalL'auteur user448810
genPrimes()
sans condition s'appelle elle-même avec exactement les mêmes arguments. Cela conduit à une récursion infinie.Ici est une façon de le faire à l'aide d'un (non récursif) générateur:
Noter que c'est optimisé pour des raisons de simplicité et de clarté plutôt que sur la performance.
est
set
garanti pour produire son contenu à lafor
énumération dans l'ordre de leur ajout dans le jeu?Je ne pense pas que c'est, mais je ne vois pas en quoi le fait que les questions.
je vous remercie. Il importe seulement de l'efficacité, mais comme vous l'avez dit, vous n'êtes pas concerné par ici, donc, ici, il n'a pas d'importance.
sur cette version, il ne sera pas question, bien sûr que c'est un bien plus gros problème, ne pas s'arrêter à la racine carrée du nombre d'être testé. Et apparemment, il pas arrêter, comme les nombres premiers viennent dans non ordonnée. 🙂
OriginalL'auteur NPE
Un bon, moyen rapide de trouver des nombres premiers.
n
est la limite supérieure pour arrêter la recherche.OriginalL'auteur MattDMo
Très sympa! Vous avez juste oublié d'arrêter de prendre les nombres premiers de l'intérieur
genPrimes()
lorsque la racine carrée dex
est atteint. C'est tout.Sans elle, vous faites glisser l'extrémité profonde, ou ce qui est de l'expression. Quand un serpent qui mange sa propre queue, elle doit s'arrêter au milieu. S'il atteint sa tête, il n'y a plus de serpent (ainsi, la direction de manger ici est à l'opposé, mais il s'applique encore...).
OriginalL'auteur Will Ness
Juste un peu plus concis:
Et vous pouvez l'utiliser comme ceci:
OriginalL'auteur bogs
Voici un rapide et claire impératif premier générateur de pas à l'aide de tamis:
Il est presque identique à NPE's réponse, mais comprend un test de racine qui accélère significativement la production de grands nombres premiers. Le résultat est le O(n) l'utilisation de l'espace pour la
primes
liste.OriginalL'auteur Rabih Kodeih
Voici un script qui génère la liste des nombres premiers de 2 à nombre donné
C'est juste une autre mise en œuvre de Crible d'Eratosthène.
OriginalL'auteur Santosh Linkha