TP Python – L'algorithme d'Euclide en Python
BTS SIO SISR 1re année – Mathématiques pour l'informatique – S05
Note
Comment ce TP fonctionne. Chaque exercice a un éditeur Python intégré à la page (il s'exécute dans ton navigateur, rien à installer). Avant de lancer, écris sur ta feuille ce que tu anticipes (« J'anticipe »). Puis lance et compare. Le bouton Valider exécute des tests : un test réussi ne dispense pas de comprendre pourquoi.
Exercice A – La division euclidienne sans // ni %
Écris division_euclidienne(a, b) (\(a \ge 0\), \(b > 0\)) qui renvoie le couple (q, r) en retranchant b tant que c'est possible.
J'anticipe. Pour a = 17 et b = 5, combien de soustractions ? Quel est le variant de ta boucle ?
def divisionpy-undeuclidienne(a, b):bksl-nl """Renvoie (q, r) tels que a = bpy-strq + r et 0 <= r < b (a >= 0, b > 0)."""bksl-nl q = 0bksl-nl r = abksl-nl # À compléter : tant que r est supérieur ou égal à b,bksl-nl # on retranche b à r et on compte un quotient de plus.bksl-nl return (q, r)bksl-nlbksl-nl
Exercice B – Diviseurs
Écris diviseurs(n) (\(n \ge 1\)) qui renvoie la liste croissante des diviseurs positifs de n.
def diviseurs(n):bksl-nl """Liste croissante des diviseurs positifs de n (n >= 1)."""bksl-nl liste = []bksl-nl # À compléterbksl-nl return listebksl-nlbksl-nl
Exercice C – PGCD par l'algorithme d'Euclide
Écris pgcd(a, b) avec une boucle while, sans utiliser math.gcd.
Je comprends. Que renvoie pgcd(7, 0) ? pgcd(0, 7) ? Justifie avec l'algorithme.
def pgcd(a, b):bksl-nl """PGCD de deux entiers naturels non tous deux nuls (algorithme d'Euclide)."""bksl-nl # À compléter : tant que b n'est pas nul, remplacer (a, b) par (b, a mod b)bksl-nl return abksl-nlbksl-nl
Exercice D – PPCM et nombres premiers entre eux
À l'aide de pgcd, écris ppcm(a, b) et premiers_entre_eux(a, b).
def pgcd(a, b):bksl-nl while b != 0:bksl-nl a, b = b, a % bbksl-nl return abksl-nlbksl-nldef ppcm(a, b):bksl-nl """PPCM de deux entiers strictement positifs."""bksl-nl ...bksl-nlbksl-nldef premierspy-undentrepy-undeux(a, b):bksl-nl """True si a et b sont premiers entre eux."""bksl-nl ...bksl-nlbksl-nl
Exercice E – Compter les étapes
Écris nombre_divisions(a, b) qui renvoie le nombre de divisions euclidiennes effectuées par l'algorithme d'Euclide jusqu'au reste nul (pour (252, 198), quatre divisions : voir le cours).
def nombrepy-unddivisions(a, b):bksl-nl """Nombre de divisions euclidiennes de l'algorithme d'Euclide appliqué à (a, b), b > 0."""bksl-nl compteur = 0bksl-nl # À compléterbksl-nl return compteurbksl-nlbksl-nl