Adloun

Le test de primalité naïf est-il polynomial ?

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 31 — Décidabilité et classes de complexité

Énoncé

On teste si est premier en essayant tous les diviseurs jusqu'à .

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 :

TailleDivisionsTemps 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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.