Séance no 2 : Autour de la multiplication et de l`exponentiation 1

publicité
Univ. Lille 1 - IREM de Lille.
Stage Algorithmique
2010-2011
o
Séance n 2 : Autour de la multiplication et de l'exponentiation
Éric Wegrzynowski. (Eric.Wegrzynowski (a) univ-lille1.fr)
1
Un algorithme égyptien pour la multiplication
Peut-on multiplier deux nombres entiers sans connaître ses tables de multiplications ?
Bien sûr, il sut de savoir additionner ! Par exemple, pour eectuer la multiplication 13 × 6
on calcule l'addition
13
13
13
13
13
13
78
+
+
+
+
+
=
Cette méthode peut s'avérer particulièrement fastidieuse si le multiplicateur est grand.
Alors peut-on faire mieux ? Oui si on sait diviser par deux (ce qui s'avèrerait très facile si
on travaillait en base 2), et multiplier par deux (ce qui revient à une simple addition). C'est la
méthode de la multiplication égyptienne.
Lorsqu'on utilise cette méthode pour multiplier deux nombres a et b avec du papier et un
crayon, on construit deux colonnes de nombres dont la première ligne est constituée des deux
nombres a et b. Les lignes suivantes sont obtenues dans la colonne de gauche en multipliant par
deux le nombre précédent, et dans la colonne de droite en le divisant par 2 (quotient entier). On
s'arrête lorsque le nombre de droite vaut 1. Le produit a × b est égal à la somme des nombres de
la colonne de gauche dont le nombre correspondant à droite est impair.
Par exemple, avec a = 33 et b = 18, on obtient
→
→
33
66
132
264
528
18
9
4
2
1
33 × 18 = 66 + 528 = 594.
A faire 1 Programmez la multiplication égyptienne en n'utilisant que des additions et des divisions
par 2. Essayez d'en décliner deux versions : une itérative et une autre récursive.
A faire 2 Combien de divisions par 2 eectue-t-on dans cet algorithme ? Et combien d'additions de
deux entiers ?
A faire 3 Programmez une fonction qui calcule le nombre d'additions eectuées dans la multiplication
égyptienne.
1
2
Exponentiation
A faire 4 Comment programmeriez-vous le calcul de ae , où a et e sont deux nombres entiers naturels,
en n'utilisant que des multiplications ?
A faire 5 Sur le modèle de la multiplication égyptienne, programmez un algorithme d'exponentiation
n'utilisant que des multiplications et des divisions par deux.
3
Les calculs de RSA
Pour protéger la condentialité des transctions électroniques (bancaire, web, . . . ), on utilise
des systèmes de chirement cryptographiques. L'un des plus utilisés actuellement est le système
RSA, acronyme construit sur les noms des trois inventeurs : Rivest, Adleman et Shamir.
Dans le système RSA, on a besoin de calculer des exponentiations modulaires de nombres
me
(mod n),
dans lesquelles les trois nombres m, e et n sont des entiers dont la taille peut être de plusieurs
milliers de bits (2048 étant une valeur courante aujourd'hui).
A faire 6 Quelle est la taille en bits de l'entier me si m et e sont deux entiers de taille t ? Donnez la
puissance de 10 la plus proche lorsque t = 2048.
Est-il raisonnable d'espérer pouvoir calculer de tels nombres ? Non n'est-ce pas ! Alors, il ne
faut pas calculer me (mod n) en calculant d'abord me , puis en eectuant la réduction modulo
n, mais au contraire en appliquant cette réduction à chaque étape de calcul.
A faire 7 Adaptez votre fonction de calcul d'exponentiation rapide aux calculs de RSA.
2
Téléchargement