TD : complexit´e
Christophe Ritzenthaler
October 20, 2008
Les nombres de Mersenne
1. Soit donc q > 2 impair et Mq= 2q−1 On d´efinit
½L0= 4
Li+1 =L2
i−2 mod (Mq)
Alors Mqest premier ssi Lq−2≡0 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 an−1≡1 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= (nl−1, . . . , n0)b´ecrit en base b. La premi`ere est bas´ee sur
l’identit´e
x(nl−1,...,ni)b=³x(nl−1,...,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=³xbi−1´bni·x(ni−1,...,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 R≥Bdo
R:= R−B;
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:= N−1;
if R < Aux then
Q:= 2 ∗Q;
else
Q:= 2Q+ 1;
R:= R−Aux;
end if;
end while;
•V´erifier qu’`a chaque ´etape on a a=Aux ·Q+Ret 0≤R < 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,a≥0;
R1 := b; (b > 0);
U0 := 1; U1 := 0;
V0 := 0; V1 := 1;
while R1>0do
Q:= DivisionQuotient(R0, R1);
R:= DivisionRemainder(R0, R1);
U:= U0−Q∗U1;
V:= V0−Q∗V1;
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
R1≥0
•Utiliser l’algorithme pour calculer les solutions de 42x≡1 (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 ≤k≤n.
•Quelles sont les valeurs initiales et finales ?
•Montrer par r´ecurrence descendante que
R0k≥R0nΦn−k.
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!