2017-03-10 2 views
-1

J'essaie d'afficher tous les nombres premiers jusqu'au nombre entré et je n'arrive pas à comprendre pourquoi cela ne fonctionne pas.Quel est le problème avec mon code? C++

Quelqu'un pourrait-il prendre le temps d'expliquer ce que j'ai fait de mal?

#include<iostream> 
#include<string> 
using namespace std; 
int main() 
{ 
    int number; 

    cout << "Enter Number: "; 
    cin >> number; 

    for (int a = 2;a <= number;a++) 
    { 

     bool prime = false; 

     for (int b = 2;b < a;b++) 
     { 
      if (a%b == 0) 
      { 
       prime = true; 
       break; 
      } 

      if (prime = true) 
       cout << a << endl; 
     }  
    } 

    system("pause"); 
    return 0; 
} 
+2

Quelques points évidents: 1) un nombre premier est celui qui est * not * divisible par un nombre quelconque sauf 1 et lui-même, 2) '=' est assignation. Quand vous voulez faire une comparaison, vous voulez '==' à la place. –

Répondre

1

Dans ce code:

if (a%b == 0) 
{ 
    prime = true; 
     break; 
} 

Vous devez écrire comme ceci:

if (a%b == 0) 
{ 
    prime = false; 
     break; 
} 

Changer également bool prime = false;-bool prime = true;

Finaly ce code:

if (prime == true) 
    cout << a << endl; 

doit être en dehors du for loop

Votre code sera mieux comme ceci:

#include<iostream> 
#include<string> 
using namespace std; 
int main() 
{ 
    int number; 

    cout << "Enter Number: "; 
    cin >> number; 

    for (int a = 2; a <= number; a++) 
    { 

     bool prime = true; 

     for (int b = 2; b < a; b++) 
     { 
      if (a%b == 0) 
      { 
       prime = false; 
       break; 
      } 
     } 

     if (prime == true) 
      cout << a << endl; 
    } 

    system("pause"); 
    return 0; 
} 

Résultat (exemple):

enter image description here

0
for(i=2;i<=number;i++) 
{ 
     ct=0; 
     for(j=2;j<i;j++) 
     { 
      if(i%j==0) 
       { 
         ct=1; 
         break; 
       } 
     } 
     if(ct==0) 
     { 
      printf("%d \t",i); 
     } 
}