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 retourneVRAIsi 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
2.(a) Pourquoi s'arrêter à ⌊√n⌋. Si n = d × q avec d ≤ q, alors d² ≤ d × q = n, donc d ≤ √n : tout entier composé possède un diviseur au plus égal à sa racine carrée. Ne trouver aucun diviseur jusqu'à ⌊√n⌋ suffit donc à conclure.
2.(b) Test de 97. ⌊√97⌋ = 9 : on effectue les divisions par 2, 3, 4, 5, 6, 7, 8, 9, soit 8 divisions, aucune n'a un reste nul → 97 est premier. (Sans la borne, il en faudrait 95.)
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).def pgcd(a, b):
while b != 0:
a, b = b, a % b
return a
print(pgcd(252, 84))