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 commej <= (i / 2) code> Évalue comme2 <= 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.