MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 4) François Meunier DMI
Entiers et Algorithmes Sujets: Algorithme d’Euclide pour trouver le PGCD. Représentations des entiers en base b. Binaire, hexadécimal, octal. Représentation complément-2 des nombres binaires négatifs. Algorithmes de l’arithmétique des ordinateurs: Addition, multiplication et division binaire.
Algorithme d’Euclide pour trouver le PGCD Trouver le pgcd de deux nombres en comparant les facteurs premiers peut être difficile si ces facteurs premiers sont inconnus. Euclide a démontré que pour toutes paires d’entiers a, b, pgcd(a, b) = pgcd((a mod b), b). Pour une paire ordonnée a,b telle que a>b, en supposant que b>1 alors (a mod b) < a. Ceci facilite la recherche du pgcd.
Exemples pgcd(372,164) = pgcd(372 mod 164, 164). pgcd(44,32) = pgcd(44 mod 32, 32) = pgcd(12, 32) = pgcd(32 mod 12, 12) = pgcd(8,12) = pgcd(12 mod 8, 8) = pgcd(4,8) = pgcd(8 mod 4, 4) = pgcd(0,4) = 4. Have students come up with other examples and work through them. Maybe start with a 2-digit example.
Algorithme d’Euclide (exemple) pgcd(33,77): Étape r = x mod y x y - 33 77 1 33 mod 77 = 33 2 77 mod 33 = 11 11 3 33 mod 11 = 0
Algorithme d’Euclide (exemple) pgcd(244,117): Par définition 244 et 117 sont premiers relatifs. Étape r = x mod y x y - 244 117 1 244 mod 117 = 10 10 2 117 mod 10 = 7 7 3 10 mod 7 = 3 4 7 mod 3 = 1 5 3 mod 1=0
Algorithme d’Euclide procédure pgcd(a, b: entiers positifs ) tant que b 0 faire r ≔ a mod b; a ≔ b; b ≔ r; Fin retourner a // dernier reste non nul
Systèmes de numération Base-b La représentation de nombres en base-10, utilise les symboles 0-9. Mais il n’existe pas seulement la base-10 Toute base b>1 peut être utilisée. Pour n’importe quels entiers positifs n,b, il existe une séquence de chiffres ak ak-1… a1a0 tels que ai<b et donnant: We’ll deal with summation notation in detail later. For now, explain what it means in this particular case. Expension en base-b de n
Bases importantes Utiliser seulement parce que nous avons 10 doigts Base b=10 (décimal): 10 symboles: 0,1,2,3,4,5,6,7,8,9. Base b=2 (binaire): 2 symboles: 0,1. (“Bits”=“binary digits.”) Base b=8 (octal): 8 symboles: 0,1,2,3,4,5,6,7. Base b=16 (hexadécimal): 16 symboles: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Représentation interne des données dans un ordinateur Chaque chiffre octal correspond à 3 bits Chiffre HEX correspond à 4 bits 10, 11, 12, 13, 14, 15
Convertion dans la Base b Algorithme informel: Pour convertir un nombre n dans une base b>1: La valeur du chiffre le moins significatif, calculée par n mod b. Remplacer n par le quotient n/b. Répéter les 2 étapes précédentes pour trouver les autres chiffres, TTQ n != 0.
Addition des entiers base-b Les nombres sont additionnés à partir du chiffre le moins significatif vers le plus significatif en faisant suivre les retenus: base-10 base-16 retenu: 1 7 4 6 3 + 2 9 1 A 4 F + C B 9 6 x + y
Addition des entiers base-b procédure addition(an−1…a0, bn−1…b0: entiers positifs dans une base base a,b) c := 0 pour j := 0 à n−1 {pour chaque chiffre} Sum := aj+bj+c {somme de 2-chiffres} sj := Sum mod base {chiffre bas de la somme } c := Sum / base {chiffre haut de la somme} fin sn := c retourner sn…s0: entier s en base base
Addition des entiers binaires procédure addition(an−1…a0, bn−1…b0: représentations binaires des entiers positifs a,b) c := 0 pour j := 0 à n−1 {pour chaque bit} bitSum := aj+bj+c {somme de 2-bits} sj := bitSum mod 2 {bit bas de la somme } c := bitSum / 2 {bit haut de la somme} fin sn := c retourner sn…s0: entier s en binaire
Multiplication des entiers binaires (+) La multiplication est simplifiée en binaire puisqu’une X par 2k correspond à faire un décalage à gauche de k-positions (<<k), et X par 0·2k ou 1·2k. x 1 y 1·(x<<0) 0·(x<<1) 0·(x<<2) 1·(x<<3) :
Multiplication des entiers binaires (+) procédure multiplication( xk xk-1…x1x0, yk yk-1…y1y0: entiers binaires positifs) x := xk xk-1…x1x0 p := 0 // produit partiel pour i := 0 à k-1 faire si yi == 1 alors p = addition(p , x << i ) retourner p multiplicande multiplicateur
Complément-2 Élimine le problème de double représentation du 0 Addition de termes signés est facile Permet d’utiliser que des opérations d’addition Représentation de nombres dans l’intervalle -2(k-1) x < 2(k-1) Ex: Java: byte [-128 to +127]
Complément-2 Représentation des négatifs: Équivalent: -x = ¬x + 1. Calculer du complément 1 Additionner 1 Équivalent: -x = ¬x + 1. 00010010 représente 18 11101101 + 1 = 11101110 représente -18 Quel est l’intervalle des valeurs entières signées de type int en Java, C ou C++? Int: 32-bits: Plus grand int=011111….1 = 231-1 = 2,147,483,647 Plus petit int =100000….0 = -231 = -2,147,483,648
Addition Complément-2 Addition comme celle décrite précédemment 11101110 = (-18)10, 11110100 = (-12)10 Additionnés ensemble: (11100010) = (-30)10: Le complément-2 de -30 devrait donner 30: (¬11100010+1) = (00011101+1) = 00011110. 1 retenu: x +y