OCaml (option informatique) · Chapitre 4 · Exercice de TD
Test de primalité
Programmation impérative : références et boucles · niveau 3 (difficile)
Énoncé
Écrire est_premier n avec une boucle while qui s'arrête dès qu'un diviseur est trouvé.
Corrigé
let est_premier n =
if n < 2 then false
else begin
let d = ref 2 and premier = ref true in
while !d * !d <= n && !premier do
if n mod !d = 0 then premier := false;
d := !d + 1
done;
!premier
end
On cherche un diviseur d de 2 à . La référence booléenne premier sert de drapeau : la condition ... && !premier (évaluation paresseuse) arrête la boucle dès qu'un diviseur est trouvé. Le begin … end groupe la séquence de la branche else en une seule expression.
Exercices semblables
- Fibonacci itératif corrigé
- Compter les diviseurs corrigé
- Suite de Syracuse corrigé
- Racine carrée entière corrigé
- Partage d'une référence (aliasing) corrigé