Chapitre 3
Analyse que quelques algorithmes arithm´ etiques
3.1 Puissance rapide et applications.
Proposition 3.1.1 Soit (G, ∗) un groupe commutatif dont on note la loi multiplicativement. On peut calculer a
nen O(log(n)) op´ erations ∗.
Remarque 3.1.2 On distinguera deux situations assez diff´ erentes selon que le coˆ ut de x ∗ y est ind´ ependant des ´ el´ ements x, y de G ou pas. Donnez 2 exemples de G dans chaque situation.
Entr´ ee: Un ´ el´ ement g de G et un naturel n.
Sortie: Un ´ el´ ement de G : g
nFonction puiss(g, n) ;
u ← 1; v ← g ; //u,v : 2 variables locales ; tantque n > 1 faire
si n pair alors
v ← v ∗ v ; n ← n/2;
sinon
u ← u ∗ v; v ← v ∗ v ; n ← (n − 1)/2;
fsi ftantque
retourner u ∗ v;
Algorithme 1: Puissance rapide.
Exercice 3.1.3 Programmez en python et en xcas une fonction de puissance rapide : puis(u,n,loi) et testez la.
3.1.1 RSA.
Proposition 3.1.4 On consid` ere un entier n = p.q o` u p et q sont des nombres premiers impairs distincts. Pour tout entier e premier avec φ(n) = (p − 1)(q − 1), la fonction ψ
e: (Z
//nZ
/)
×→ (Z
//nZ
/)
×, x 7→ x
e[n] est bijective, et la connaissance de p et q permet de trouver sa r´ eciproque en temps polynomial (en log n).
Remarque 3.1.5 On ne connait pas d’algorithme polynomial (en log n) pour trouver les facteurs premiers d’un entier. De plus la donn´ ee de (n, φ(n)) est ´ equivalente (en temps polynomial) ` a la donn´ ee de (p, q)
Exercice 3.1.6 Dans la documentation officielle de Python, en ´ etudiant les ”builtin functions”, trouver comment obtenir un caract` ere ` a partir d’un code ascii, et vice versa. Trouver dans xcas comment convertir une chaine en la liste des codes ascii de ses caract` eres.
1
Un exemple de programme python pour encoder une chaine vers un entier. thonverb (python)
def c h a i n e 2 e n t i e r s ( L ) :
”””On e n c o d e une c h a i n e de c a r a c t e r e p a r l ’ e n t i e r somme s u r i d e s c i . 2 5 6 ˆ i ou c i e s t l e c o d e a s c i i du ieme c a r a c t e r e de l a c h a i n e ”””
a =1; s=0 # s e s t l a somme p a r t i e l l e , e t a l a p u i s s a n c e de 256 c o u r a n t e f o r i in L :
s=s+a∗ord ( i ) a=a∗256 return s
print c h a i n e 2 e n t i e r s ( ’ a b c d e f t u t u ’ )