Exercice — dans l'esprit des sujets du bac
- Écrire l'algorithme itératif de l'algorithme d'Euclide pour calculer `PGCD(a, b)`. Appliquer à `PGCD(252, 84)` en donnant la trace (tableau des valeurs de a et b).
- Écrire une fonction `EstPremier(n)` qui retourne `VRAI` si est premier.
- Pourquoi suffit-il de tester les diviseurs jusqu'à ?
- Tester si 97 est premier. Combien de divisions sont nécessaires ?
- Écrire une procédure `Decomposer(n)` qui affiche la décomposition de en facteurs premiers. Appliquer à .
Voir la correction commentéeAprès avoir posé votre démarche
1. PGCD itératif (Euclide). Tant que b≠0, remplacer (a,b) par (b, a mod b).
TDOL : `r` entier (reste). Type/Nature : `a`, `b` entiers.
```
DEF FN PGCD(a, b : entier) : entier
Variables r : entier
Début
TantQue b ≠ 0 faire
r ← a mod b ; a ← b ; b ← r
FinTantQue
Retourner a
Fin
```
Trace pour PGCD(252, 84) : (252, 84) → (84, 0). On retourne 84.
2. Test de primalité. Un entier n ≥ 2 est premier s'il n'a aucun diviseur dans 2..⌊√n⌋.
```
DEF FN EstPremier(n : entier) : booléen
Variables i : entier
Début
Si n < 2 alors Retourner Faux FinSi
Pour i de 2 à Tronc(Racine(n)) faire
Si n mod i = 0 alors Retourner Faux FinSi
FinPour
Retourner Vrai
Fin
```
3. Décomposition en facteurs premiers — appliquer à n = 360.
```
DEF PROC Decomposer(n : entier)
Variables d : entier
Début
d ← 2
TantQue d * d ≤ n faire
TantQue n mod d = 0 faire
Écrire(d) ; n ← n div d
FinTantQue
d ← d + 1
FinTantQue
Si n > 1 alors Écrire(n) FinSi
Fin
```
360 = 2 × 2 × 2 × 3 × 3 × 5 = . Contrainte : n dans [2..+∞[ ; ne pas oublier d'afficher n s'il reste > 1 en fin de boucle.
Équivalent Python (extrait).
```python
def pgcd(a, b):
while b != 0:
a, b = b, a % b
return a
print(pgcd(252, 84))
```