Je sais que je suis un nécromancien qui répond à de vieilles questions, mais je viens de trouver cette question en cherchant sur le net des moyens de mettre en œuvre des tests efficaces sur les nombres premiers.
Jusqu'à présent, je pense que l'algorithme de test de nombres premiers le plus rapide est le Strong Probable Prime (SPRP). Je cite les forums Nvidia CUDA :
L'un des problèmes de niche les plus pratiques en théorie des nombres concerne l'identification des nombres premiers. Étant donné N, comment pouvez-vous efficacement déterminer efficacement s'il est premier ou non ? Il ne s'agit pas seulement d'un problème théorique. Il ne s'agit pas seulement d'un problème théorique, il peut s'agir d'un problème réel dont on a besoin dans le code, peut-être lorsqu'on doit trouver dynamiquement une taille de table de hachage première dans certaines limites. Si N est de l'ordre de 2^30, voulez-vous vraiment faire 30000 tests de division pour rechercher des facteurs ? tests de division pour rechercher des facteurs ? Il est évident que non.
La solution pratique courante à ce problème est un test simple appelé un test de prime probable d'Euler, et une généralisation plus puissante appelée test de la prime probable forte (SPRP). Il s'agit d'un test qui, pour un nombre entier N peut le classer de manière probabiliste comme premier ou non, et des tests répétés peuvent augmenter la probabilité d'exactitude. La partie lente du test lui-même consiste principalement à calculer une valeur similaire à A^(N-1) modulo N. Toute personne mettant en œuvre le chiffrement à clé publique RSA a utilisé cet algorithme. Il est utile à la fois pour les grands nombres entiers (comme 512 bits) que pour les entiers normaux de 32 ou 64 bits.
Le test peut être transformé d'un rejet probabiliste en une preuve définitive de primalité en calculant à l'avance certains paramètres d'entrée du test qui sont connus pour toujours réussir pour des plages de N. Malheureusement, la découverte de ces "meilleurs tests connus" est en réalité une recherche dans un domaine énorme (en fait infini). En 1980, une première liste de tests utiles a été créée par Carl Pomerance (célèbre pour avoir été celui qui a à factoriser RSA-129 avec son algorithme Quadratic Seive). Plus tard, Jaeschke a amélioré les résultats de manière significative en 1993. En 2004, Zhang et Tang ont amélioré la théorie et les limites du domaine de recherche. Greathouse et Livingstone ont publié les résultats les plus modernes jusqu'à présent sur le web, à l'adresse http://math.crg4.com/primes.html les meilleurs résultats d'un énorme domaine de recherche.
Voir ici pour plus d'informations : http://primes.utm.edu/prove/prove2_3.html y http://forums.nvidia.com/index.php?showtopic=70483
Si vous avez simplement besoin d'un moyen de générer de très grands nombres premiers et que vous ne vous souciez pas de générer tous les nombres premiers < un nombre entier n, vous pouvez utiliser le test de Lucas-Lehmer pour vérifier les nombres premiers de Mersenne. Un nombre premier de Mersenne est de la forme 2^p -1. Je pense que le test de Lucas-Lehmer est l'algorithme le plus rapide découvert pour les nombres premiers de Mersenne.
Et si vous voulez non seulement utiliser l'algorithme le plus rapide mais aussi le matériel le plus rapide, essayez de le mettre en œuvre en utilisant Nvidia CUDA, écrivez un noyau pour CUDA et exécutez-le sur le GPU.
Vous pouvez même gagner de l'argent si vous découvrez des nombres premiers suffisamment grands. L'EFF offre des prix allant de 50 000 à 250 000 dollars : https://www.eff.org/awards/coop
0 votes
Un vieil article que j'ai trouvé, mais qui semble intéressant : S'amuser avec les nombres premiers
29 votes
@Jaider cela échoue pour des nombres aussi bas que 7 (111). Elle échoue également pour 1001=9. Et il est clair que cela échoue pour presque tous les nombres premiers en général (cela ne couvre pas le cas 2^p - 1, qui sont des nombres premiers de Mersenne - exemples générés classiquement - qui seront toujours de la forme 111...1).
2 votes
@Kasperasky - Vous n'avez pas mentionné quel tamis ? Vous voulez probablement dire le tamis d'Eranthoses !
0 votes
Le tamis d'Eratosthène algorithme