Aller au contenu principal

Module 06 · Leçon 1

PGCD et PPCM

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Calculer le PGCD par soustractions successives
  • Calculer le PGCD par l'algorithme d'Euclide (mod)
  • Déduire le PPCM à partir du PGCD

Avant de commencer

Vous voulez simplifier la fraction 60/84. Il faut trouver le plus grand diviseur commun à 60 et 84. Comment l'algorithmique résout-elle ce problème ?


1. PGCD par soustractions successives

Principe : PGCD(a, b) = PGCD(a − b, b) si a > b. On remplace le plus grand par la différence, jusqu'à ce que les deux soient égaux.

FUNCTION PGCD_Soustraction(a, b : integer) : integer;
BEGIN
  WHILE a <> b DO
    IF a > b THEN
      a := a - b
    ELSE
      b := b - a;
  PGCD_Soustraction := a;
END;

Trace pour PGCD(60, 84) : (84,60) → (24,60) → (24,36) → (24,12) → (12,12). Résultat : 12.


2. Algorithme d'Euclide (par modulo)

Bien plus rapide : PGCD(a, b) = PGCD(b, a mod b). On s'arrête quand b = 0.

DEF FN PGCD(a, b : entier) : entier
  Tant que b ≠ 0 Faire
    r ← a mod b
    a ← b
    b ← r
  FinTantQue
  PGCD ← a
Fin PGCD

Trace pour PGCD(60, 84) — état (a, b) après chaque tour :

Tourr = a mod bnouveau a (= ancien b)nouveau b (= r)
160 mod 84 = 608460
284 mod 60 = 246024
360 mod 24 = 122412
424 mod 12 = 0120 → arrêt

Résultat : PGCD = 12 en 4 tours.


3. PPCM

PPCM(a, b) = (a × b) / PGCD(a, b)

FUNCTION PPCM(a, b : integer) : integer;
BEGIN
  PPCM := (a * b) DIV PGCD(a, b);
END;

Exemple : PPCM(60, 84) = (60 × 84) / 12 = 5040 / 12 = 420.


4. Exercices

Exercice 1facile
Trace d'Euclide

Donner les états successifs de (a, b) pour PGCD(36, 24) avec l'algorithme d'Euclide.

Voir le corrigé

(36,24) → (24, 36 mod 24 = 12) → (12, 24 mod 12 = 0). Résultat : 12.

Exercice 2moyen
Réduire une fraction (type bac courant)

Écrire une procédure Reduire(VAR n, d : entier) qui simplifie la fraction n/d en divisant les deux par leur PGCD.

Voir le corrigé
PROCEDURE Reduire(VAR n, d : integer);
VAR p : integer;
BEGIN
  p := PGCD(ABS(n), ABS(d));   { utilise valeur absolue }
  n := n DIV p;
  d := d DIV p;
END;

{ Test : 60/84 → 5/7 }
Exercice 3difficile
PGCD de N entiers (hors bac, bonus)

Étendre PGCD à un tableau de N entiers. Indice : PGCD(a, b, c) = PGCD(PGCD(a, b), c).

Voir le corrigé
FUNCTION PGCD_Tab(T : Tab; n : integer) : integer;
VAR i, res : integer;
BEGIN
  res := T[1];
  FOR i := 2 TO n DO
    res := PGCD(res, T[i]);
  PGCD_Tab := res;
END;

Optimisation : si res = 1, on peut s'arrêter (impossible de descendre plus bas).


5. Erreurs fréquentes au bac

  • Inverser l'ordre des affectations dans Euclide : a := b; b := a MOD b; écrase a avant de calculer le mod.
  • Diviser par 0 si b = 0 au départ (cas particulier à tester).
  • PPCM = a × b / PGCD : risque d'overflow pour grands entiers.

6. Quiz

Quiz (5 questions)

1

Combien d'étapes pour PGCD(100, 75) par Euclide ?

2

PGCD par soustractions est plus lent que par modulo car :

3

PPCM(12, 18) vaut :

4

L'algorithme d'Euclide s'arrête quand :

5

Si PGCD(a, b) = 1, on dit que a et b sont :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.