Page d'accueil encyclopedie-enligne.com en page d'accueil
Liste Articles: [0-A] [A-C] [C-F] [F-J] [J-M] [M-P] [P-S] [S-Z] | Liste Catégories | Une page au hasard | Pages liées

Test de primalité


Un test de primalité est un algorithme permettant de savoir si un nombre entier est premier.

Sommaire

Méthode naïve

Le test le plus simple est le suivant : pour tester N, on vérifie s'il est divisible par l'un des entiers compris entre 1 et N (bornes non comprises). Si la réponse est négative, alors N est premier, sinon il est composé.

Plusieurs changements permettent d'améliorer les performances de cet algorithme :

Tests probabilistes

Les tests probabilistes ne sont pas des tests de primalité au sens strict : ils ne permettent pas de s'assurer de façon certaine qu'un nombre est premier, mais sont acceptables pour des applications pratiques telles que la cryptologie qui souvent dépend de façon critique des grands nombres premiers. Ils sont pourtant très utilisés dans les cas où un faible taux d'erreur est acceptable : on les appelle des nombres premiers industriels. L'idée de base est la suivante :

  1. Prendre aléatoirement un nombre a.
  2. Vérifier une certaine égalité entre a et le nombre donné n. Si l'égalité échoue, alors n est un nombre composé, a est connu comme un témoin pour la composition, et le test s'arrête.
  3. Répéter l'étape 1 jusqu'à ce que la certitude requise soit achevée.

Après plusieurs itérations, si n n'est pas reconnu comme un nombre composé, alors il est déclaré probablement premier.

Ces tests sont rapides mais souvent imparfaits. Pour un test donné, il peut exister certains nombres composés qui seront déclarés « probablement premier » quelque soit le témoin. De tels nombres sont appelés nombres pseudopremiers pour ce test.

Le test de primalité probalistique le plus simple est le test de primalité de Fermat. Il est quelque fois utilisé si un affichage rapide des nombres est nécessaire, par exemple, dans la phase de génération de clé de l'algorithme de cryptographie à clé publique RSA. Le test de primalité de Miller-Rabin et le test de primalité de Solovay-Strassen sont des variantes plus sophistiquées qui détectent tous les composés ; ils sont souvent des méthodes de choix.

Tests déterministes rapides

Un test de primalité déterministe est le test cyclotomique ; son temps d'exécution peut être prouvé comme étant de O(nclog(log(n))), où n est le nombre de chiffres de N et c est une constante indépendante de n. Il est plus lent que le temps polynômial.

Le test de primalité de courbe elliptique peut être démontré comme étant d'exécution O(n6), mais seulement si certains énoncés de théorie analytique des nombres non encore démontrés (mais largement acceptés comme vrais) sont utilisés. Dans la pratique, ce test est plus lent que le test cyclotomique pour les nombres comportant plus de 10 000 chiffres.

L'implémentation de ces deux méthodes est plutôt difficile, et leur probabilités d'erreur dans la pratique peut être par conséquent bien plus haute que celles des méthodes probabilistes mentionnées ci-dessus.

Si l'hypothèse de Riemann généralisée est vraie, le test de Miller-Rabin peut être converti en une version déterministe avec un temps d'exécution Õ(n4). Dans la pratique, cet algorithme est plus lent que les deux précédents pour des tailles de nombres qui peuvent être traités par eux.

En 2002, Manindra Agrawal, Nitin Saxena et Neeraj Kayal ont décrit un nouveau test de primalité déterministe qui s'exécute en Õ(n12), et cette borne peut être démontrée rigoureusement. De plus, cette conjecture donnée comme non démontrée, mais largement reconnue comme vraie, il s'exécuterais en Õ(n6). Comme tel, cela fournit le premier test de primalité déterministe avec un temps d'exécution polynômial. Dans la pratique, cet algorithme est plus lent que les autres méthodes.

Méthodes théoriques des nombres

Certaines méthodes théoriques des nombres existent, telles que le test de Lucas-Lehmer pour tester si un nombre est premier.

Le test de Lucas-Lehmer est relié au fait que l'ordre multiplicatif d'un certain nombre a modulo n est n-1 pour un nombre premier n quand a est une racine primitive. Si nous pouvons montrer que a est une racine primitive pour n, nous pouvons montrer que n est premier.




This site support the Wikimedia Foundation. This Article originally from Wikipedia. All text is available under the terms of the GNU Free Documentation License Page HistoryOriginal ArticleWikipedia