
Autrement dit l’identité AKS n’est que la traduction sous
forme polynomiale du fait qu’un entier naturel n est premier
si, et seulement si, il divise les
, pour variant de 1
à.
3.3 Description de l’algorithme
Soit un entier donné.
1. si pour et , alors est composé.
2. Déterminer le plus petit entier tel que
.
3. Si pour un entier , alors est
composé.
4. Si , alors est premier.
5. Pour à :
si
, alors est composé.
6. est premier.
3.4 Schéma descriptif de la preuve de la vali-
dité de l’algorithme
La validité de l’algorithme repose essentiellement sur l’exis-
tence d’un tel exhibé à l’étape 2. de l’algorithme et au fait
que celui-ci est connu à un encadrement près. Ainsi l’éva-
luation des polynômes lors de l’étape 5. de l’algorithme est
rendue possible avec une complexité polynomiale par le fait
de réductions modulo . La recherche de et le
nombre de vérications à accomplir ensuite avec les déter-
minés s’eectuent en un temps polynomial en log(n), si bien
que l’on obtient eectivement un algorithme déterministe en
temps polynomial pour des tests de primalité. On renverra le
lecteur intéressé à l’annexe pour une démonstration exhaus-
tive et élémentaire de tous ces résultats. Nous proposons
toutefois un résumé des diérents coûts ci-dessous :
1. étape 1 :
on calcul le , puis, pour
chaque , on applique un algorithme di-
chotomique sur an de trouver un tel que
. recherche dichotomique sur
2. étape 2, le calcul de r :
pour tout , on
teste si l’ordre de est supérieur à cela requiert
multiplications modulo , qui est borné par
3. étape 3, calcul pgcd(,), :
. Un calcul
de pgcd coûte avec l’algorithme d’Euclide.
En utilisant la borne sur on a le résultat.
4. étape 4, comparaison de r et n : (comparai-
son de nombres de longueur )
5. étape 5, test des congruences. on utilise un algorithme
d’élévation au carré type square and multiply, on doit
donc faire multiplications sur des polynômes
de degré dont les coecients sont codés sur
bits, un polynôme fait donc : . Une mul-
tiplication coûte alors
, d’où vérier une
congruence coûte
, on obtient, en majo-
rant les indices de boucles :
3.5 Résultats expérimentaux
Dans cette partie, nous décrivons l’implémentation de l’al-
gorithme AKS précédent (dans sa version en
et nous analysons expérimentalement son coût. Il est donc
question de mettre en lumière les avantages ou au contraire
les inconvénients que présentent l’implémentation et l’utili-
sation de cet algorithme. l’implémentation principale, c’est-
à-dire celle sur laquelle se base l’ensemble de nos résultats
expérimentaux, a été réalisée via la librairie pari GP. Ce
choix a été motivé par le fait que cette librairie possède de
nombreuses fonctions relatives à la théorie des nombres dont
nous avions l’utilité. De plus, cette librairie est connue pour
sa rapidité, ce qui nous permettait d’obtenir en un temps
raisonnable un algorithme fonctionnel.
Commençons par décrire comment nous obtenons le de
l’algorithme. L’idée est simple, on teste tous les à partir
de . Pour un xé, on multiplie fois n
par lui-même et on regarde, à chaque étape, si le résultat
est égal à 1. Si c’est le cas, on teste un autre . Sinon, le
courant est le bon. Pour les opérations de base sur les int
modulo, ou sur les polynômes, nous utilisons les types natifs
de pari GP. Cela permet de limiter la place en mémoire.
Pour le calcul du pgcd on utilise l’algorithme d’Euclide. Les
calculs de puissance se font via un algorithme type ”square
and multiply”. Voici nos résultats :
L
Figure 1 : évolution du temps de calcul en fonction
de la taille du nombre exprimée en bits
Avant de commenter ces résultats, nous allons décrire com-
ment nous les avons obtenus. Nous avons généré des nombres
premiers aléatoires (5 dans le cas présent) de diérentes
tailles via openssl. Puis pour chaque taille, nous avons cal-
culé la moyenne des temps obtenus. Il est important de pré-
ciser que les nombres testés sont tous premiers. En eet,
un nombre composé risque d’être détecté composé avant
qu’il n’ait subi toutes les étapes de l’algorithme. C’est le
cas si, par exemple, le nombre considéré est une puissance