informatique (MP2I/MPI) · Chapitre 31 · Exercice de TD
Le test de primalité naïf est-il polynomial ?
Décidabilité et classes de complexité · niveau 2
Énoncé
On teste si est premier en essayant tous les diviseurs jusqu'à .
- Quelle est la complexité de cet algorithme en fonction de ?
- En fonction de la taille de l'entrée ?
- Conclure.
Corrigé
1. L'algorithme fait divisions. C'est très peu devant — on serait tenté d'appeler cela « rapide ».
2. L'entrée est l'entier , écrit en binaire : sa taille est bits. Donc et
L'algorithme est exponentiel en la taille de l'entrée.
3. Le tableau rend la chose palpable, et les temps sont mesurés :
| Taille | Divisions | Temps mesuré | |
|---|---|---|---|
| bits | s | ||
| bits | s | ||
| bits | s | ||
| bits | s (extrapolé) |
Treize bits de plus multiplient le temps par quatre-vingt-dix. Une clé cryptographique fait bits : l'algorithme demanderait divisions.
Ce que l'exercice enseigne. « Polynomial » ne se juge jamais sur la valeur des nombres, toujours sur leur écriture. La faute est d'autant plus facile que a l'air modeste. Le test de primalité est dans — l'algorithme AKS, de 2002, est polynomial en —, mais ce n'est pas celui-là qui le prouve.
C'est exactement le défaut annoncé par le chapitre chap:dynamique pour le sac à dos, et il resurgit ici sur un algorithme que tout le monde croit connaître.
Exercices semblables
- Le certificat vide corrigé
- Du seuil à l'optimum corrigé
- Lire une réduction dans le bon sens corrigé
- Deux problèmes, une réduction d'une ligne corrigé
- L'arrêt sur l'entrée vide corrigé