pour calculer un million de nombres premiers
J'ai une question pour imprimer un million de nombres premiers . J'ai écrit un programme en java pour que .. Il est actuellement de 1,5 minutes environ à calculer .. je pense que ma solution n'est pas efficace. J'ai utilisé l'algo ci-dessous:
- Ajoutant 1 2 3 pour la liste des premiers initialement
- Calculer le dernier chiffre du nombre à vérifier
- Vérifier si le chiffre est 0 , 2 ou 4 ou 6 ou 8, puis en sautant le nombre
- d'autre le calcul de la racine carrée du nombre ..
- En essayant de Diviser le nombre de départ à partir de 2 jusqu'à la racine carrée du nombre
- si un nombre est divisible puis en sautant le nombre d'autre de l'ajouter à la liste des premiers
J'ai lu plusieurs autres solutions , mais je n'ai pas trouvé une bonne réponse. S'il vous plaît suggérer idéalement, ce devrait être d'environ un minimum de temps pour calculer ce et quels sont les changements nécessaires pour rendre l'algorithme plus efficace.
Votre algorithme est incorrect, 1 n'est pas premier
J'ai ajouté 1 dans le premier de la liste qui est mal, mais je ne suis pas à diviser le nombre par 1 ... il a été écrit par erreur ...
Ressemble questions de l'Entrevue.
J'ai ajouté 1 dans le premier de la liste qui est mal, mais je ne suis pas à diviser le nombre par 1 ... il a été écrit par erreur ...
Ressemble questions de l'Entrevue.
OriginalL'auteur priyas | 2012-11-15
Vous devez vous connecter pour publier un commentaire.
Un simple crible d'Eratosthène fonctionne comme les battants. Ce calcule la de 1 000 000 e premier en moins d'une seconde sur ma boîte:
EDIT: tamisage de façon optimale commence à partir de p^2, pas de 2p, comme Ness correctement points (composé de tous les numéros ci-dessous p^2 aura été marquée dans les précédentes itérations).
vous pouvez améliorer considérablement la vitesse de votre code, en commençant par le filtrage de chaque cours d'eau à l'endroit correct dans le temps: vous avez besoin de filtrer par 3 seulement à partir de 9; filtrer par 5 uniquement à partir de 25; etc. Voir stackoverflow.com/a/8871918/849891 .
Cela explique beaucoup de choses! Gagné près de 200% d'augmentation de la vitesse, mais pas près de la bit-réseau sur la base d'approches. Expérimenter avec les deux approches. Merci!
vous avez tout à fait raison. J'ai modifié ma réponse en conséquence.
OriginalL'auteur Rafe
Si vous avez ajouté 1 pour votre liste, votre réponse est fausse déjà 🙂
De toute façon, Tamis de Erathosthenes est l'endroit où vous devriez commencer, il est incroyablement simple et très efficace.
Une fois que vous êtes familier avec l'idée de tamis et comment ils fonctionnent, vous pouvez passer à Crible d'Atkin, qui est un peu plus compliqué, mais évidemment plus efficace.
OriginalL'auteur biziclop
Clé de choses:
Sonne comme votre méthode de collecte des nombres premiers qui ne fonctionne pas bien, ou votre fiche méthode. Il devrait être plus rapide de passer par une petite liste de nombres, toujours...
OriginalL'auteur PearsonArtPhoto
Que vous souhaitez implémenter Crible d'Eratosthène algorithme pour trouver les nombres premiers de 1 à
n
et de manière itérative augmenter la plage tout en le faisant si besoin. (c'est à dire de ne pas trouver les nombres premiers de 1 000 000 encore)OriginalL'auteur amit
Premier, 1 n'est pas un nombre premier.
Deuxième, la millionième premier est 15,485,863, de sorte que vous devez être prêt pour certaines grandes de traitement des données.
Troisième, vous voudrez probablement utiliser le Crible d'Eratosthène; voici une version simple:
Qui ne peuvent pas travailler pour la taille du tableau que vous aurez besoin de calculer le premier million de nombres premiers. Dans ce cas, vous aurez envie de mettre en œuvre une segmentation Crible d'Eratosthène.
J'ai fait beaucoup de travail avec nombres premiers à mon blog, y compris un essai qui fournit une optimisation du Crible d'Eratosthène, avec des implémentations dans les cinq langages de programmation.
Peu importe ce que vous faites, avec tout langage de programmation, vous devriez être en mesure de calculer le premier million de nombres premiers en pas plus de quelques secondes.
OriginalL'auteur user448810
Voici un Ocaml programme qui implémente le Section de première instance de tamis (c'est un peu l'inverse d'Eratosthène comme souligné à juste titre par la Volonté):
Il fonctionne sur un flux de nombres entiers. Chaque fois qu'un nouveau nombre premier est découvert, un filtre est ajouté au flux de sorte que le reste du flux est filtré de tous les multiples de ce nombre premier. Ce programme peut être modifié pour générer des nombres premiers à la demande.
Il devrait être assez facile de prendre la même approche en Java.
Espérons que cette aide!
mod
que votre code ne.Beurk! terrible erreur. J'ai mélangé tout ça. Merci! 🙂
OriginalL'auteur Asiri Rathnayake
Voici une solution javascript qui utilise la récursivité et itération pour atteindre le millionième premier. Ce n'est pas aussi rapide que le Tamis de Erathosthenes, mais ne nécessite pas de connaître la valeur de la millionième premier (c'est à dire, la taille de la nécessaire tamis) à l'avance:
De sortie:
OriginalL'auteur user2809286
OriginalL'auteur MangduYogii
N'est pas tout, après 5 se terminant par cinq divisible par 5, de sorte que vous pouvez ignorer les choses qui de droit(1,numb)<>"5" par exemple 987,985. J'en ai fait une dans Excel qui permettra de tester un million de chiffres pour les nombres premiers et de cracher dans une colonne en environ 15 secondes, mais il devient fou autour de 15 millions de
OriginalL'auteur jstiene