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