TD : complexit´e
Christophe Ritzenthaler
October 20, 2008
Les nombres de Mersenne
1. Soit donc q > 2 impair et Mq= 2q1 On d´efinit
½L0= 4
Li+1 =L2
i2 mod (Mq)
Alors Mqest premier ssi Lq20 mod (Mq). Programmer cette proc´edure.
Quelle est la complexit´e ?
2. Quelle est la complexit´e de l’algorithme effectuant le test des divisions successives
? La programmer. Evaluer le temps. Conclusion.
3. Calculer le temps mis par la fonction mersenne. Comparer avec la proc´edure
d´efinie.
4. On aurait pu ´egalement penser au petit th´eor`eme de Fermat qui donne une condi-
tion n´ecessaire pour qu’un nombre soit premier. Mais on peut trouver des nombres
n, appel´es nombre de a-pseudo-premier, non premiers et qui r´eussissent le test de
Fermat an11 mod (n) pour un apremier `a n. Ecrire une proc´edure perme-
ttant d’en trouver s’il en existe un plus petit que 500 pour a= 2. Les nombres
a-pseudo-premiers pour tout apremier `a nsont appel´es nombres de Carmicael.
V´erifier que celui trouv´e est de Carmicael.
Exponentiation rapide
Soit xun ´el´ement d’un anneau et nun entier. Comment calculer efficacement xn?
Essayer de calculer brutalement 340000000 (mod 123).
Essayer avec &ˆ.
Nous proposons dans la suite deux m´ethodes d’exponentiation rapide.
Soit xun ´el´ement et n= (nl1, . . . , n0)b´ecrit en base b. La premi`ere est bas´ee sur
l’identit´e
x(nl1,...,ni)b=³x(nl1,...,ni+1)b´b·xni.
1
Ecrire l’algorithme correspondant (on pourra regarder la relation pr´ec´edente comme
une r´ecurrence descendante yi=yb
i+1 ·xni).
La seconde m´ethode est bas´ee sur l’identit´e :
x(ni,...,n0)b=³xbi1´bni·x(ni1,...,n0)b.
Ecrire l’algorithme correspondant.
Quelle est le nombre de multiplications dans les deux m´ethodes ?
Quels sont les avantages/inconv´enients de chaque m´ethode ?
Complexit´e du calcul de xc(mod m) o`u x, c, m sont de taille au plus n.
Algorithme d’Euclide
L’algorithme de division euclidienne et l’algorithme d’Euclide (´etendu) sont incontourn-
ables en arithm´etique. Nous allons montrer qu’ils sont polynomiaux. Mais d’abord
v´erifions que nous savons utiliser les commandes de MAPLE.
Calculer le reste de la division euclidienne du polynˆome x5+ 1 par le polynˆome
x3+x+ 1.
Calculer le pgcd ´etendu de 123 et 156.
Division euclidienne
Voici deux algorithmes pour la division euclidienne de a > b > 0.
B:= b;
R:= a;
Q:= 0;
while RBdo
R:= RB;
Q:= Q+ 1;
end while;
Pourquoi cet algorithme s’arrˆete-t-il ?
Pourquoi donne-t-il le bon r´esultat ? On v´erifiera qu’`a chaque ´etape a=Qb +R.
En voici maintenant une version binaire. Soit nle plus petit entier tel que 2nb > a.
2
B:= b;
R:= a;
Q:= 0;
N:= n;
Aux := 2NB;
while N > 0do
Aux := Aux/2;
N:= N1;
if R < Aux then
Q:= 2 Q;
else
Q:= 2Q+ 1;
R:= RAux;
end if;
end while;
V´erifier qu’`a chaque ´etape on a a=Aux ·Q+Ret 0R < Aux et que si N= 0
on a Aux =B.
Comparer la complexit´e des deux algorithmes.
Algorithme d’Euclide
R0 := |a|;
R1 := |b|; (b6= 0)
while R1>0do
R:= DivisionRemainder(R0, R1);
R0 := R1;
R1 := R;
end while;
Montrer que lorsque R1 := 0 on a R0 := gcd(a, b).
Voici maitenant la version ´etendue de l’algorithme d’Euclide qui a la mˆeme com-
plexit´e.
3
R0 := a,a0;
R1 := b; (b > 0);
U0 := 1; U1 := 0;
V0 := 0; V1 := 1;
while R1>0do
Q:= DivisionQuotient(R0, R1);
R:= DivisionRemainder(R0, R1);
U:= U0QU1;
V:= V0QV1;
R0 := R1; R1 := R;
U0 := U1; U1 := U;
V0 := V1;V1 := V;
end while;
Montrer que, en sortie, R1 := 0,R0 := gcd(a, b)et
U0a+V0b=R0.
On pourra raisonner par r´ecurrence sur les relations :
U0a+V0b=R0
U1a+V1b=R1
R10
Utiliser l’algorithme pour calculer les solutions de 42x1 (mod 67).
Pour montrer que l’algorithme est polynˆomial, il est suffisant de montrer que le
nombre de boucles est polynˆomial en la taille de acar toutes les op´erations `a l’int´erieur
de la boucle le sont.
Proposition 0.1. Soit a > b > 0et Φ := (1 + 5)/2. Alors le nombre d’it´erations est
au pire log(a)/log(Φ) <1.441 log2(a).
Pour se faire, on note R0k(resp. R1k, Rk, Qk) les valeurs de R0 (resp. R1, R, Q) `a
la k-i`eme it´erations, pour 0 kn.
Quelles sont les valeurs initiales et finales ?
Montrer par r´ecurrence descendante que
R0kR0nΦnk.
4
1 / 4 100%