Salut aux citoyens de Habrovsk! Aujourd'hui, nous continuons à partager du matériel utile, dont une traduction a été préparée spécifiquement pour les étudiants du cours "Algorithmes pour les développeurs" .

Ătant donnĂ© un certain nombre
n
, comment comprendre que ce nombre est premier? Supposons que
n
initialement impair, car sinon la tĂąche est assez simple.
L'idée la plus évidente serait de rechercher tous les diviseurs de
n
, cependant, jusqu'à présent, le problÚme principal est de trouver un algorithme efficace.
Test Ă la ferme
Selon le
théorÚme de Fermat , si
n
est un nombre premier, alors pour tout a l'égalité suivante vaut:
a nâ1 =1 (mod n)
. De là , nous pouvons dériver la rÚgle de test de Fermat pour vérifier la simplicité d'un nombre: prendre un aléatoire
a â {1, ..., nâ1}
et vérifier si l'égalité
a nâ1 =1 (mod n)
est vraie. Si l'égalité n'est pas respectée, alors
n
est trĂšs probablement composite.
NĂ©anmoins, la condition d'Ă©galitĂ© peut ĂȘtre remplie mĂȘme si
n
n'est pas simple. Par exemple, prenez
n
= 561 = 3 Ă 11 Ă 17
. Selon le
théorÚme du reste chinois:
Z 561 = Z 3 Ă Z 11 Ă Z 17
, oĂč chacun a â Z
â 561 correspond Ă ce qui suit:
(x,y,z) â Z â 3 ĂZ â 11 11ĂZ â 17 .
Selon le théorÚme de Fermat,
x 2 =1
,
y 10 =1
z 16 =1
. Puisque 2, 10 et 16 sont tous 560 diviseurs, cela signifie que
(x,y,z) 560 = (1, 1, 1)
, en d'autres termes
a 560 = 1
pour tout
a â Z â 561
.
Peu importe quel a nous choisissons, 561 passera toujours le test de Fermat, malgré le fait qu'il soit composite, tant que a est mutuellement simple avec
n
. De tels nombres s'appellent des nombres de Carmichael et il s'avĂšre qu'il y en a un nombre infini.
Si
a
pas coprime avec
n
, alors il ne passe pas le test de Fermat, mais dans ce cas, nous pouvons refuser les tests et continuer Ă rechercher les diviseurs de
n
, en calculant le GCD (
a, n ).
Test de Miller-Rabin
On peut améliorer le test en disant que
n est premier si et seulement si les solutions
x 2 = 1 (mod n)
sont x = ±1
.
Ainsi, si n réussit le test de Fermat, c'est-à -dire
a nâ1 = 1
, alors on vérifie également que
a (nâ1)/2 = ±1
, car
a (nâ1)/2
est la racine carrée de 1.
Malheureusement, des nombres comme, par exemple, 1729 - le troisiÚme nombre de Carmichael peut encore tromper ce test amélioré. Et si nous répétons? Autrement dit, jusqu'à ce que cela soit possible, nous réduirons l'exposant de moitié, jusqu'à ce que nous atteignions un nombre différent de 1. Si nous obtenons à la fin quelque chose d'autre que -1, alors
n
sera composite.
Plus formellement, soit 2
S la plus grande puissance de 2, divisible par n-1, c'est-Ă -dire
nâ1=2 S q
pour un nombre impair
q
. Chaque numéro de la séquence
a nâ1 = a (2^S)q
,
a (2^S-1)q
, ...,
aq
.
Il s'agit de la racine carrée du membre précédent de la séquence.
Ensuite, si
n
est un nombre premier, alors la sĂ©quence doit commencer par 1 et chaque nombre suivant doit Ă©galement ĂȘtre 1, ou le premier membre de la sĂ©quence peut ne pas ĂȘtre 1, mais alors c'est -1.
Le test de Miller-Rabin prend un
aâ Z n
aléatoire. Si la séquence ci-dessus ne commence pas par 1, ou si le premier membre de la séquence n'est pas 1 ou -1, alors
n
n'est pas simple.
Il s'avĂšre que pour tout composite
n
, y compris les nombres de Carmichael, la probabilité de réussir le test de Miller-Rabin est d'environ 1/4. (En moyenne, beaucoup moins.) Ainsi, la probabilité que
n
réussisse plusieurs tests diminue de façon exponentielle.
Si
n
ne réussit pas le test de Miller-Rabin avec une séquence commençant par 1, alors nous avons une racine carrée non triviale de 1 modulo
n
, et nous pouvons
trouver efficacement les diviseurs de n
. Par conséquent, les nombres de Carmichael sont toujours pratiques à prendre en compte.
Lorsque le test est appliqué à des nombres de la forme
pq
, oĂč
p
et
q
sont de grands nombres premiers, ils ne réussissent pas le test de Miller-Rabin dans presque tous les cas, car la séquence ne commence pas par 1. Donc, nous ne serons pas en mesure de casser le RSA.
En pratique, le test de Miller-Rabin est implémenté comme suit:
- Ătant donnĂ©
n
, nous devons trouver s
tel que n â 1 = 2 S q
pour un q
impair. - Prendre un aléatoire
a â {1,...,nâ1}
- Si a q = 1, alors
n
rĂ©ussit le test et nous arrĂȘtons l'exĂ©cution. - Pour
i= 0, ... , sâ1
vĂ©rifiez l'Ă©galitĂ© a (2^i)q = â1
. Si l'égalité est vérifiée, n
rĂ©ussit le test (arrĂȘt de l'exĂ©cution). - Si aucune des conditions ci-dessus n'est remplie, alors
n
est composite.
Avant d'effectuer le test de Miller-Rabin, il vaut la peine d'effectuer quelques divisions plus triviales en petits nombres premiers.
à strictement parler, ces tests sont des tests pour déterminer si un nombre est considéré comme composite, car ils ne prouvent pas en fait que le nombre contrÎlé est premier, mais ils prouvent définitivement qu'il peut se révéler composite.
Il existe encore des algorithmes déterministes travaillant en temps polynomial pour déterminer la simplicité (Agrawal, Kayal et
Saxena ), mais aujourd'hui ils sont considérés comme peu pratiques.