0
votes

Comprendre cela imbriqué pour une boucle pour afficher des nombres premiers en C ++

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. xxx

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.s. Je sais que 2 est un nombre premier, mais je ne comprends pas le code. Merci.


4 commentaires

Où est-ce que le cassée; 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 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) Évalue comme 2 <= 2/2 qui est faux.


Votre indentation de la ligne 9 jette des gens de leur jeu. Ce n'est pas une partie de la boucle.


4 Réponses :


3
votes

Le pour boucle: xxx

ne passe pas j <= (i / j) la première fois quand i = 2 .

et: xxx

ne fait pas partie de ce pour boucle. < / p>


2 commentaires

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 ( { et } ) autour de Tout le pour boucles " et si instructions 'Blocks of Code. Demander des ennuis quand ils sont laissés de côté des blocs de code de ligne.



2
votes

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";
}


0 commentaires

0
votes

facteurs entre deux à N / 2, pour vérifier le nombre de nombres premiers ou non xxx


0 commentaires

0
votes

IT imprime 2 car lorsque i = 2 , j = 2 , la condition de la boucle interne échoue ( 2> 2/2 ).

Un autre fait intéressant à propos de ce code est pourquoi vous ne montez que sur i / j pour trouver des nombres premiers. En effet, le nombre composé a un facteur prime non supérieur à sa racine carrée ( démonstration ).

donc, fondamentalement j ne va que 2 jusqu'à sqrt (i) .

aussi Vous pouvez nettoyer votre code si vous modifiez la condition pour de j <= i / j à j * j <= i . Pourquoi? Parce que comme i / j est une division entière dont vous avez besoin de condition supplémentaire si (j> (i / j)) . Donc, le code final sera le suivant: xxx


0 commentaires