PGCD de deux entiers⚓︎
Pour calculer le Plus Grand Commun Diviseur, on peut utiliser une propriété mathématique de la fonction pgcd
pour deux entiers positifs n
et m
PGCD de 12 et 16
- Les diviseurs de 12 sont : \(1, 2, 3, 4, 6, 12\)
- Les diviseurs de 16 sont : \(1, 2, 4, 8, 16\)
Le plus grand diviseur commun est 4.
PGCD de n
et zéro
-
Les diviseurs de zéro sont tous les entiers, en effet zéro est un multiple de tout entier. \(0×k = 0\) pour tout \(k\in\mathbb N\).
-
Les diviseurs communs à
n
et zéro, sont donc tous les diviseurs den
.
Si n > 0
, le plus grand diviseur est \(n\), ainsi pgcd(n, 0)
est égal à n
.
PGCD de zéro et zéro
Les diviseurs de zéro sont tous les entiers, et donc les diviseurs communs à zéro et zéro sont également tous les entiers, sans limite, et sans plus grand.
On étend pourtant la définition avec pgcd(0, 0)
égal à 0
.
Cela permet aux formules de rester également valables dans ce cas.
Cas général
- Si
m = 0
, alorspgcd(n, m)
est égal àn
- Sinon,
pgcd(n, m)
est égal au PGCD entrem
et le reste de la division den
parm
.
Exercice
Écrire une version récursive de la fonction pgcd
def pgcd(n, m):bksl-nl """Renvoie le PGCD de n et mbksl-nl avec la convention pgcd(0, 0) égal à 0bksl-nl avec n et m positifsbksl-nl """bksl-nl ...bksl-nlbksl-nlassert pgcd(0, 0) == 0bksl-nlassert pgcd(12, 0) == 12bksl-nlassert pgcd(12, 16) == 4bksl-nlbksl-nl
Réponse
def pgcd(n, m):
"""Renvoie le PGCD de n et m
avec la convention pgcd(0, 0) égal à 0
avec n et m positifs
"""
if m == 0:
return n
else:
return pgcd(m, n%m)
assert pgcd(0, 0) == 0
assert pgcd(12, 0) == 12
assert pgcd(12, 16) == 4