File:PGCD par divisions successives.svg

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file(SVG file, nominally 660 × 825 pixels, file size: 4 KB)

Captions

Captions

See   File:GCD_through successive_divisions.svg

Summary

[edit]
Description
Français :
Le  PGCD  de  deux  entiers  naturels
est leur commun diviseur,  multiple de tous leurs diviseurs communs.   Pour  le  calculer,
l’algorithme  transforme  pas  à  pas  un  couple  d’entiers  positifs  en  un  autre  de mêmes
diviseurs  communs.   Après  chaque  division  euclidienne,   le  couple  diviseur‑reste
devient  un  nouveau  dividende‑diviseur  éventuel,   jusqu’à  un  zéro  décisif.
Le  reste  qui  précède  est  alors  le  PGCD  désiré.
L’algorithme   d’Euclide   obtient
le  PGCD  de  deux  entiers  positifs
par  divisions  successives.
En  remplaçant  chaque  division  euclidienne
par  une  soustraction  itérée,   on  obtient
le  même  PGCD.
 Organigrammes  de  calculs  de  PGCD  de  deux  entiers  naturels 

Clé de la démonstration :   si deux entiers sont multiples d’un certain entier k,  alors leur
différence ou leur somme est aussi un multiple de k
.  Conséquence :   l’ensemble  des
communs  diviseurs  d’une  paire  donnée  d’entiers  est  inchangée  quand  le  plus  grand
élément  de  la  paire  est  remplacé  par  la  différence  positive  des  deux  éléments,
comme  dans  le  deuxième  organigramme.

Par  exemple,   72–20 = 52,  52–20 = 32,  32–20 = 12.   Et  les  couples  suivants  ont
le  même  ensemble  de  communs  diviseurs :   (72,  20),  (52,  20),  (32,  20),  (12,  20). 
Plus brièvement,  (72,  20)  et  (20,  12)  ont les mêmes diviseurs communs.  Quand  72  et  20
entrent  dans  l’algorithme   d’Euclide  comme  valeurs  initiales  de  d  et  g,   12  apparaît  dans
cette  sous‑suitede restes:   (72,  20,  12),   renvoyée  ci‑dessous  dans  le  second  exemple.

20  est  le  reste  de  la  division  euclidienne  de  20  par  72,
tandis  que  12  est le reste quand on divise  72  par  20.   En pseudo‑code,  l’expression
20  mod  72  prend  la  valeur  20,  tandis  que  72  mod  20  vaut  12.  En  effet,   20 = 20 - 0 × 72,
tandis que  12 = 72 - 3 × 20.   Dans  l’algorithme  d’Euclide,   un  quotient  tel  que  0  ou  3  tombe
dans  l’oubli.   En Python    comme  en JavaScript,   20 % 72  renvoie  20,   et   72 % 20  —> 12,
où   %   signifie  modulo.


Première  traduction  en  JavaScript.
Quand  vous  copiez  la  ligne  suivante, 
et la collez ensuite dans la barre d’adresse de votre navigateur : 
JavaScript: g = 72; d = 20; s =" PGCD("+ d +", "+ g +") = "; while( g ){ r = d % g; d = g; g = r } s + d;
votre navigateur  exécute  le code  JavaScript
quand vous tapez  Entrée.   Si ce n’est pas exécuté,
alors  activez  JavaScript   dans  votre navigateur.
Et puis,  en saisissant d’autres entiers positifs
à la place de  72 et 20,  vous obtenez leur PGCD.

Seconde  traduction  en  JavaScript.
  Exemple  plus  compréhensible,
  grâce  aux  copieux  commentaires  placés  entre   /*  et  */
/* Pour  ouvrir  une  fenêtre  Firefox
 dédiée au code JavaScript :    Shift + F4   */

 d = 20; g = 72;
/*  Impératif :  deux entiers positifs entrent dans le calcul.
 Ces conditions pourraient être vérifiées automatiquement dans une
 fonction plus élaborée    PGCD = function(… ){… },    qui
 retournerait un message d'alerte en cas d'emploi anormal.
 Voir l'instruction  try  dans
File:PGCD_par soustractions_successives.svg
 Ici un emploi anormal n'est pas prévu.   Alors,  prenez soin de
 remplacer   20  et  72   par des entiers positifs,  quand vous
 commandez le calcul du PGCD de deux autres nombres.

 Pourquoi nommer  g  la 2ème variable ?⸮     G  évoque  le  “Grand”
 de l'acronyme  PGCD,   zéro étant le plus Grand entier (positif)
 pour la relation d'ordre partiel nommée “divisibilité” :
 zéro est lE  mUlTiPlE  de tous les entiers.  */

mcd = "(" + d +", "+ g;
/*  Juste après l'assignation des valeurs de type  Number à  d
 et  g,   une valeur de type  String  est attribuée à la variable
 nommée  mcd.   “String”  signifie  “chaîne de caractères”.   Ici
 le premier caractère   mcd.charAt( 0 )   est une parenthèse.
 Ensuite le signe  +   commande soit   “additionne les nombres”,
 soit  “concatène les chaînes”,   selon le contexte.  Après une
 chaîne,  le  +  commande une concaténation.  Alors la valeur
 Number  de  d  est tacitement convertie en son écriture en
 numération décimale :  une chaîne éphémère  (20.).toString( 10 )
 prolonge la chaîne  "("  de longueur 1.   La syntaxe qui suit
 a une signification similaire.

 Les valeurs   20  et  72  sont rangées dans la valeur initiale
 de  mcd :   "(20, 72",   avant que la boucle ci‑dessous modifie
 ces deux valeurs  Number,   pour obtenir leur PGCD  */


//  sqr = " Suite  de  “tous les restes” :\n " + mcd;
/*  Deux slashs  //  marquent le début d'un commentaire
 placé sur la même ligne,  non exécuté par un interpréteur
 de JavaScript.  Ci‑dessus la ligne qui commence par deux slashs
 est un commentaire,  comme l'est ce texte-ci,  placé entre ses
 deux paires particulières de caractères  (comme en CSS).

 Mais si cette  1ère  paire de slashs est supprimée,  alors
 la ligne devient un morceau de code exécuté comme les autres.
 Et la valeur  String  tapée sur cette nouvelle ligne de code
 est assignée à la variable  sqr.   Le caractère  "\n"  de cette
 chaîne commande le début de sa seconde ligne de caractères,
 égale à  mcd  pour le moment,  à un espace près.  Ci‑dessous
 la boucle unique du code modifiera la valeur initiale de  sqr,
 si la 2ème paire de slashs est aussi supprimée dans cette boucle.
*/


while( g ){
/*  début de la  boucle.
 Entre les parenthèses de  while,   l'expression est
 implicitement convertie en un éphémère objet de type  Boolean,
 si nécessaire.  Sa valeur est  true  ou  false  (en français :
 vrai ou faux).   Code équivalent :   while( Boolean( g ))
 Par exemple,   Boolean( 72 )  renvoie  true :
 la valeur requise pour entrer dans la boucle.

 Autre code équivalent :   while( g > 0 )
 Vous pouvez vérifier,  bien sûr :    ( 72 > 0 )  —> true
 ( 72 > 0 ).constructor  —> function Boolean() { [native code] }

 Dans un cas ultérieur,   Boolean( 0 )  —> false.
 Quand  Boolean( g )  renvoie  false,   l'entrée dans la boucle
 est refusée,  alors le code après la boucle est exécuté.  */

    r = d % g;
/*  %  est l'opération  modulo.
 À la première occurrence du nom de variable  r,
 une nouvelle variable nommée  r  est créée,  de portée globale.
 Le reste de la division euclidienne de  d  par  g  est
 assigné à la variable  r  (r comme “reste”).
*/

    d = g; g = r;
/*  éventuelle  paire  dividende-diviseur
 d'une division ultérieure,   si  g  n'est pas zéro  */

//    sqr += ", "+ g;
/*  code facultatif considéré en fait comme commentaire,
 mais exécutable si les slashs sont supprimés.  Une erreur
 est renvoyée si cette seule paire de slashs est supprimée.
 Code équivalent :   sqr = sqr + ", "+ g;  */
}
/*  fin de la  boucle  while( g )  */


" PGCD" + mcd +") = "+ d;
/*  renvoie une chaîne avec le PGCD désiré  */

//  sqr += ").";
/*  Quand les trois paires de slashs ci-dessus sont supprimées,
 la valeur définitive de   sqr   est renvoyée :   la suite de
 “tous les restes”  pour la valeur initiale de la paire  (d, g).
 N'importe où dans la suite des restes,  deux entiers successifs
 ont  toujours  le  même  ensemble  de  communs  diviseurs.

 Raccourci-clavier  dans  Firefox
 pour exécuter le code :   Ctrl + L   */
Date
Source Own work
Author Arthur Baelde
Other versions
SVG development
InfoField
 
The SVG code is valid.
 
This /Baelde was created with a text editor.

Licensing

[edit]
Arthur Baelde, the copyright holder of this work, hereby publishes it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
Attribution: Arthur Baelde
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current12:37, 24 May 2024Thumbnail for version as of 12:37, 24 May 2024660 × 825 (4 KB)Arthur Baelde (talk | contribs)Uploaded own work with UploadWizard

Metadata