2016-04-25 25 views
-2

に素数を検索するとき、私はnum1num2間の素数を見つけるために見つけるためにしようとしていますが、私の入力は1,10間違った出力一定間隔

であれば、このコードは、利回りだけ1,2,3として素数であります
#include <iostream> 
using namespace std; 
void prime(int num1, int num2) 
{ 
    bool prime = 1; // prime=1 means the number is prime 
    for (num1; num1 <= num2; num1++) 
    { 
     for (int i = 2; i < num1; i++) 
     { 
      if (num1 % i == 0) 
      { 
       prime = 0; 
       break; 
      } 
     } 

     if (prime == 0) 
     { 
      cout << num1 << " Is not Prime" << endl; 
     } 
     else 
     { 
      cout << num1 << " Is prime" << endl; 
     } 
    } 
} 

int main() 
{ 
    int num1, num2; 
    cout << "Enter 2 numbers to check the prime numbers between them:"; 
    cin >> num1 >> num2; 
    prime(num1, num2); 
} 
+4

....これを試してみてください。コードをステップ実行したときにデバッガはあなたに何を表示しますか?それを使う方法がわからない場合は、今すぐ学びましょう。あなたはこの種の問題を将来自分自身で理解することができ、コードがどのように処理されているかについてたくさん学ぶことができます。 –

+1

1は定義上、素数ではありません。しかし、あなたのコードが素数だと思うように> = 2の要素はありません。 –

+0

トピックオフ:リサーチプライムナンバーシーブス。 – user4581301

答えて

2

prime=1は、候補素数をループする前に一度だけ設定しています。だからすぐに素数ではない数字(あなたの場合は4)を押すとprime=0が得られ、その後は決して再び1に設定されません。

0

また第ため、ステップI + = 2で、3から(INT)SQRT((二重)NUM2)に行くべきです。

+0

これはコードをより効率的にするが、それ以上の*正しい*にはならない。 (実際にはあまり正確ではありませんが、 'num2'ではなくnum1'を意味します!) –

+0

これらの2つのキャストは必要ありません。 –

0

boolプライムをtrueにリセットすることを忘れています。

は、ここでは許容できる問題ではありません*私のコードを修正してください*

#include <iostream> 
using namespace std; 
void prime(int num1, int num2) 
{ 
    for (num1; num1 <= num2; num1++) 
    {  
     bool prime = 1; // prime=1 means the number is prime 
     for (int i = 2; i < num1; i++) 
     { 
      if (num1 % i == 0) 
      { 
       prime = 0; 
       break; 
      } 
     } 

     if (prime == 0) 
      cout << num1 << " Is not Prime" << endl; 
     else 
      cout << num1 << " Is prime" << endl; 
    } 
} 

int main() 
{ 
    int num1, num2; 
    cout << "Enter 2 numbers to check the prime numbers between them:"; 
    cin >> num1 >> num2; 
    prime(num1, num2); 
}