diff --git a/slides/cours_2.md b/slides/cours_2.md
index 1180dbb8211aa15e779a1b894728044d37e32c52..5f8b46f4266dcb9d8b7aef997369244a213592a5 100644
--- a/slides/cours_2.md
+++ b/slides/cours_2.md
@@ -59,7 +59,7 @@ int main() {
 - Initialisation, addition et multiplication de matrices
 - Couverture de la reine
 
-# Le calcul du PPCM (1/2)
+# Le calcul du PPCM (1/6)
 
 ## Définition
 
@@ -69,12 +69,75 @@ nombres.
 
 Exemples:
 
-```bash
+```C
 PPCM(3, 4) = 12,
 PPCM(4, 6) = 12,
 PPCM(5, 15) = 15.
 ```
 
+. . .
+
+## Mathématiquement
+
+Décomposition en nombres premiers:
+
+$$
+36 = 2^2\cdot 3^2,\quad 90=2\cdot 5\cdot 3^2,
+$$
+On garde tous les premiers à la puissance la plus élevée
+$$
+PPCM(36, 45)=2^2\cdot 3^2\cdot 5=180.
+$$
+
+# Le calcul du PPCM (2/6)
+
+## Exemple d'algorithme
+
+```C
+36  < 90  // 36  + 36
+72  < 90  // 72  + 36
+108 > 90  // 90  + 90
+108 < 180 // 108 + 36
+144 < 180 // 144 + 36
+180 = 180 // The End!
+```
+
+* 5 additions, 5 assignations, et 6 comparaisons.
+
+. . .
+
+## Transcrivez cet exemple en algorithme (groupe de 3)
+
+. . .
+
+## et codez-le!
+
+. . .
+
+
+# Le calcul du PPCM (3/6)
+
+## Tentative de correction
+
+```C
+int main() { 
+    int m = 15, n = 12;
+    int mult_m = m, mult_n = n;
+    while (mult_m != mult_n) {
+        if (mult_m > mult_n) {
+            mult_n += n;
+        } else {
+            mult_m += m;
+        }
+    }
+    printf("Le ppcm de %d et %d est %d\n", n, m, mult_m);
+}
+```
+
+Combien d'additions / comparaisons au pire?
+
+# Le calcul du PPCM (4/6)
+
 ## Comment décrire une fonction qui ferait ce calcul (arguments, sorties)?
 
 . . .
@@ -94,7 +157,31 @@ Par groupe de 3:
 * réfléchissez à un algorithme donnant le PPCM de deux nombres;
 * écrivez l'algorithme en pseudo-code.
 
-# Le calcul du PPCM (1/2)
+# Le calcul du PPCM (5/6)
+
+Si un nombre, `p`, est multiple de `a` et de `b` alors il peut s'écrire `p = a
+* i = b * j`  ou encore `p / a = i` et `p / b = j`.
+
+<!-- Si un nombre, $p$, est multiple de $a$ et de $b$ alors il peut s'écrire -->
+<!-- $$ -->
+<!-- p = a \cdot i = b \cdot j, -->
+<!-- $$ -->
+<!-- ou encore $p / a = i$ et $p / b = j$. -->
+
+## Pseudo-code
+
+```C
+int ppcm(int a, int b) {
+    for (i in [1, b]) {
+        if a * i is divisible by b {
+            return a * i
+        }
+    }
+}
+```
+
+
+# Le calcul du PPCM (6/6)
 
 Si un nombre, `p`, est multiple de `a` et de `b` alors il peut s'écrire `p = a
 * i = b * j`  ou encore `p / a = i` et `p / b = j`.
@@ -160,3 +247,33 @@ int main() {
 }
 ```
 
+
+```C
+#include <stdio.h>
+void main() {
+   int n = 90;
+   int m = 78;
+   printf("n = %d et m = %d\n", n, m);
+
+   // algorithme naif
+   int gcd = 1;
+   for (int div = n; div >= 2; div--) {
+      if (n % div == 0 && m % div == 0) {
+         gcd = div;
+         break;
+      }
+   }
+   printf("Le pgcd de %d et %d est %d\n",n,m,gcd);
+
+   // algorithme d'Euclide
+   int tmp_n = n;
+   int tmp_m = m;
+   while (tmp_n % tmp_m > 0) {
+      int tmp = tmp_n;
+      tmp_n = tmp_m;
+      tmp_m = tmp%tmp_m;
+   }
+   printf("Le pgcd de %d et %d est %d\n", n, m, tmp_m);
+}
+   
+```