Salut !
Je vais t’aider à dérouler toute l’exécution du programme ; tu comprendras plus facilement. L’idée est la suivante :
- On teste tous les diviseurs possibles de
nombre
, c’est-à-dire tous les entiers entre 2 et nombre
.
- Si l’un deux divise
nombre, alors
nombre` n’est pas premier.
- Sinon,
nombre
est premier.
Maintenant, pour comprendre plus précisément comment ça marche en pratique, déroulons l’exécution pour nombre = 7
par exemple. Déjà, un point important à noter, c’est que j’ai l’impression que tu n’as pas bien compris le fonctionnement de la boucle for
: à chaque tour de boucle, on augmente i, et on ne s’arrête que lorsque le test i < nombre
n’est plus vrai. En d’autres termes, i va prendre toutes les valeurs entre 2 et nombre - 1
. A partir de ce constat, faisons un tableau décrivant la valeur des variables à chaque tour de boucle :
i |
nombre % i |
est_premier |
2 |
1 |
true |
3 |
1 |
true |
4 |
3 |
true |
5 |
2 |
true |
6 |
1 |
true |
Comme à chaque tour de boucle, nombre % i != 0
, est_premier
ne passe jamais à false
. Donc à la fin, cela affiche bien « 7 est premier ».
Maintenant, que se passe-t-il avec un nombre non premier ? Essayons avec n = 9
:
i |
nombre % i |
est_premier |
2 |
1 |
true |
3 |
0 |
false |
Comme 3 divise 9, au moment où on arrive à l’itération où i == 3
, on va satisfaire la condition nombre % i == 0
et est_premier
va donc passer à false
; de plus, l’instruction break
fait sortir de la boucle ! On affiche alors bien « 9 n’est pas premier » !
Plus généralement, lorsque tu ne comprends pas comment fonctionne un morceau de code, si tu n’arrives pas à comprendre « de tête », prends un papier et un crayon et déroule l’exécution sur papier en gardant la trace des valeurs des variables. C’est beaucoup plus facile que de tout faire dans sa tête !
J’espère que c’est plus clair pour toi, n’hésite pas si tu as encore des questions !