180 likes | 318 Views
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.
E N D
MATHÉMATIQUES DISCRÈTESChapitre 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é quepour 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>1alors (a mod b) < a. • Ceci facilite la recherche du pgcd.
Exemples • pgcd(372,164) = pgcd(372 mod 164, 164). • 372 mod 164 = 372164372/164 = 372164·2 = 372328 = 44. • pgcd(164,44) = pgcd(164 mod 44, 44). • 164 mod 44 = 16444164/44 = 16444·3 = 164132 = 32. • 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.
Algorithme d’Euclide (exemple) pgcd(33,77):
Algorithme d’Euclide (exemple) pgcd(244,117): Par définition 244 et 117 sont premiers relatifs.
Algorithme d’Euclide procédure pgcd(a, b: entiers positifs ) tant queb 0 faire r≔amodb; 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… a1a0tels queai<b et donnant: 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: x + y
Addition des entiers base-b procédureaddition(an−1…a0, bn−1…b0: entiers positifs dans une base basea,b) c := 0 pour j := 0 à n−1 {pour chaque chiffre} Sum := aj+bj+c {somme de 2-chiffres} sj:= Summodbase{chiffre bas de la somme } c := Sum / base {chiffre haut de la somme} fin sn := c retournersn…s0: entier s en base base
Addition des entiers binaires procédureaddition(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:= bitSummod 2 {bit bas de la somme } c := bitSum / 2 {bit haut de la somme} fin sn := c retournersn…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.
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 pouri := 0 àk-1 faire siyi == 1 alors p = addition(p , x << i ) retournerp 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: • 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. retenu: x +y