Je suis un débutant dans le codage, je suis donc confondu sur le code d'échantillon suivant pour afficher des nombres premiers inférieurs à 20. Disons pour la première boucle, i = 2, J'ai d'abord choisir avoir j = 2. Puis, à la ligne 8, j'ai si (i% j == 0) cassée; i = j = 2 satisfasse cette condition. Alors, pourquoi ma sortie a-t-elle toujours 2 comme l'un des nombres premiers? P> P.s. Je sais que 2 est un nombre premier, mais je ne comprends pas le code. Merci. p> p>
4 Réponses :
Le ne passe pas et: p> ne fait pas partie de ce pour code> boucle:
j <= (i / j) code> la première fois quand
i = 2 code>. p>
pour code> boucle. < / p> p>
Merci pour la clarification. Je pense que je l'ai maintenant.
Vous êtes totalement accueilli. Le code serait beaucoup plus lisible avec des accolades bouclées ( { code> et
} code>) autour de Tout b> le
pour code> boucles " et
si code> instructions 'Blocks of Code. Demander des ennuis quand ils sont laissés de côté des blocs de code de ligne.
Si nous réécrivons votre code comme celui-ci:
for (i = 2; i < 20; i++) { for (j = 2; j <= (i / j); j++) { if (i % j == 0) break; } if (j > (i / j)) cout << i << " is prime\n"; }
facteurs entre deux à N / 2, pour vérifier le nombre de nombres premiers ou non
IT imprime Un autre fait intéressant à propos de ce code est donc, fondamentalement aussi Vous pouvez nettoyer votre code si vous modifiez la condition 2 code> car lorsque
i = 2 code>,
j = 2 code>, la condition de la boucle interne échoue (
2> 2/2 code>).
i / j code> pour trouver des nombres premiers. En effet, le nombre composé a un facteur prime non supérieur à sa racine carrée ( démonstration ). p>
j code> ne va que
2 code> jusqu'à
sqrt (i) code>. p>
pour code> de
j <= i / j code> à
j * j <= i code>. Pourquoi? Parce que comme
i / j code> est une division entière dont vous avez besoin de condition supplémentaire
si (j> (i / j)) code>. Donc, le code final sera le suivant: p>
Où est-ce que le
cassée; code> vous prend dans le code?
j <= (i / 2) dans la boucle et J> i / 2 après que la boucle aidera
Avez-vous omis des supports ou votre indentation est-elle fausse? Le second
si code> n'est pas dans la boucle interne. (De la logique du code, votre indentation est fausse. Les crochets seraient toujours utiles.) Mis à côté de cela, J = 2 n'est pas atteint pour i = 2 comme
j <= (i / 2) code> Évalue comme
2 <= 2/2 code> qui est faux.
Votre indentation de la ligne 9 jette des gens de leur jeu. Ce n'est pas une partie de la boucle.