File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/extensions/TeX/xypic.js

Mathjax

mercredi 17 avril 2024

PGCD (2). Algorithme d'Euclide. PPCM

 Cet article fait suite à 


Dans ce billet, nous voyons un algorithme permettant de calculer le plus grand commun diviseur de deux entiers (le pgcd) plus efficace que l'algorithme des soustractions successives. Cette algorithme basé sur des divisions euclidiennes successives s'appelle l'algorithme d'Euclide. Un script Python est donné plus bas. 
Ensuite, nous définissons le plus petit commun multiple (ppcm) de deux entiers et nous donnons une relation le reliant au pgcd.

Algorithme d'Euclide

On peut améliorer la méthode précédente à partir de la remarque suivante sur la division euclidienne.

Lorsque l'on retire b (avec 0 < b\leq a) à a plusieurs fois jusqu'à ce que le résultat obtenu soit inférieur à b, on fait en fait une division euclidienne
a-bq=r
0\leq r<b est le reste de la division euclidienne de a par b, et q le quotient de cette même division qui est le nombre maximum de fois que l'on peut retirer b à a avant que le résultat ne devienne négatif.

Cela revient donc à faire une division au lieu de faire q soustractions, ce qui s'avère utile lorsque le calcul d'un division ne demande pas plus d'effort que celui d'un soustraction. 

Exemple numérique.

On peut reprendre l'exemple de l'article [] en remplaçant plusieurs soustractions par le même nombre par une division :
  • 2051=2\times 1001 + 49
  • 1001=20\times 49 + 21
  • 49=2\times 21 +7
  • 21=3\times 7

On en déduit que 7 est le plus grand commun diviseur de 2051 et 1001 en seulement 4 étapes, au lieu de 26.


Théorème (Algorithme d'Euclide).
Soit a,b deux entiers tels que 0< b \leq a.

On pose 
\left\{\begin{array}{rclr} r_0     & = & a &\\ r_1     & =&b&\\r_{n+2}&=& \textrm{reste de la division euclidienne de } r_{n+1} \textrm{par } r_{n} & (n\in\mathbb N, r_n>0) \end{array} \right.

Alors la suite (r_n) est décroissante et stationnaire en \textrm{pgcd}(a,b).

Plus précisément, il existe un entier t\geq 1 tel que r_{t}>0 et r_{t+1}=0 et pour tout entier k\leq t, on a r_{k+1}<r_k.  

Preuve. 

Tout d'abord, on montre que pour tout entier naturel n, \textrm{pgcd}(r_n,r_{n+1}=\textrm{pgcd}(a,b)

Notons d=\textrm{pgcd}(a,b).

Pour n=0, il n'y a rien à montrer.

Supposons que pour un certain n, \textrm{pgcd}(r_n,r_{n+1}=\textrm{pgcd}(a,b).

On a r_{n}=r_{n+1}q+r_{n+2}, avec 0\leq r_{n+2}<r_{n+1}.

Soit D=\textrm{pgcd}(r_{n+1},r_{n+2}).

d divise r_{n+1} et r_n donc d divise r_n-r_{n+1}q=r_{n+2}. Donc d est un diviseur commun à r_{n+2} et r_{n+1}, et d\leq D.

De même D divise r_n car r_{n}=r_{n+1}q+r_{n+2}. C'est donc un diviseur commun à r_n et à r_{n+1}. Ainsi D\leq d.

On a donc D=d prouvant par récurrence que pour tout entier naturel n, \textrm{pgcd}(r_n,r_{n+1}=\textrm{pgcd}(a,b).

Par construction, la suite (r_n) est strictement décroissante jusqu'à ce que r_n=0

Voici un algorithme Python permettant de calculer le \textrm{pgcd} de deux entiers naturels en utilisant l'algorithme d'Euclide.

Algorithme Python


Plus petit commun multiple


Si a et b sont deux nombres entiers naturel, notons 
\mathcal M(a) et \mathcal M(b) les ensembles respectifs de leurs multiples. 

Le nombre a\times b étant à la fois un multiple de a et de b est un élément de \mathcal M(a)\cap \mathcal M(b)

L'ensemble \mathcal M(a)\cap \mathcal M(b) étant un sous-ensemble non-vide de \mathbb N possède un plus petit élément, un minimum

Cet élément s'appelle le plus petit commun multiple à a et à b

On le note \textrm{ppcm}(a,b).

Propriété. 
Si a,b sont deux entiers naturels, alors
ab=\textrm{ppcm}(a,b)\times \textrm{pgcd}(a,b)

Démonstration. 

Comme \textrm{pgcd}(a,b) divise a et b, il existe un entier naturel k tel que a=k\times\textrm{pgcd}(a,b) et un entier naturel h tel que b=h\times\textrm{pgcd}(a,b).

h et k sont premiers entre eux car s'il avaient un diviseur commun d strictement supérieur à 1, alors d\times \textrm{pgcd}(a,b) serait un diviseur commun à a et à b tel que d\times \textrm{pgcd}(a,b)> \textrm{pgcd}(a,b), contredisant la maximalité de \textrm{pgcd}(a,b) comme diviseur commun à a et à b.

Ainsi ab=\left[kh\times\textrm{pgcd}(a,b)\right]\times \textrm{pgcd}(a,b)

On note m=kh\times\textrm{pgcd}(a,b).

Comme m=ha et m=kb, m est donc un multiple commun à a et à b.

Soit M un multiple commun à a et à b. On a M=ta=sb pour des entiers naturels s et t

Supposons que M<m.

Ainsi M=t\times k\times\textrm{pgcd}(a,b) (et M=s\times h\times\textrm{pgcd}(a,b) ). 


t\times k\times\textrm{pgcd}(a,b)=M<m=k\times\textrm{pgcd}(a,b) implique t<1 d'où t=0, puis M=0. On peut en déduire que m est le plus multiple à a et à b non nul. 

Autrement dit m=\textrm{ppcm}(a,b).

Exemple. 

Calculer la somme des fractions
\frac{7}{63}+\frac{5}{42}

Pour que ces deux fractions s'écrivent avec un même dénominateur, on cherche un dénominateur commun. En prenant le plus petit commun multiple, on pourra optimiser les calculs à faire car les nombres en jeu seront les plus petits possible.

\mathrm{pgcd}(42,63)=7\times \mathrm{pgcd}(6,9)=21 \times \mathrm{pgcd}(2,3)=21

63=21\times 3 et 42=21\times 2. Ainsi, \mathrm{ppcm}(63,21)=\frac{21\times 3\times 21\times 2}{21}=21\times 3\times 2=63\times 2=42\times 3=126

On a \frac{7}{63}=\frac{2\times 7}{2\times 63}=\frac{14}{126} et
\frac{5}{42}=\frac{5\times 3}{42\times 3}=\frac{15}{126}.

On en déduit que
\frac{7}{63}+\frac{5}{42}=\frac{14}{126}+\frac{15}{126}=\frac{29}{126}

Et ensuite

Dans un article suivant, je présenterai un algorithme améliorant l'algorithme d'Euclide : l'algorithme d'Euclide amélioré.

Aucun commentaire:

Enregistrer un commentaire