2015-02-09 37 views
0

我需要的輸出閱讀次數那麼這個數是否是質不是。出於某種原因,當它到達11它不會輸出,這是素數,只是打印 11 12這個數字不是素數。問題,我發現環素數

我知道那裏有一個合乎邏輯的問題,我while循環,但我不明白。任何幫助表示讚賞。

int main() 
{ 
    bool isPrime = true; 

    int sqrtNum; 
    int divisor = 3; 

    for(int i = 0; i < 100; i++) 
    { 
     cout << i << "\t"; 


     if (i == 0 || i == 1) 
      cout << "That number is not prime." << endl; 
     else if (i == 2) 
      cout << "That number is prime." << endl; 
     else if (i % 2 == 0) 
      cout << "That number is not prime." << endl; 
     else 
     { 
      sqrtNum = static_cast<int> (sqrt(static_cast<double>(i))); 

      while (divisor <= sqrtNum) 
      { 
       if (i % divisor == 0) 
       { 
        cout << "That number is not prime." << endl; 
        isPrime = false; 
        break; 
       } 
       else 
       { 
        divisor = divisor + 2; 
       } 
      } 
      if (isPrime) 
      { 
       cout << "That number is prime" << endl; 
      } 
     } 

    } 
    system("pause"); 
    retu 
+2

沒有U A調試器下運行呢? – pm100 2015-02-09 18:19:50

+7

你忘了isPrime重置每次輪循環 – pm100 2015-02-09 18:20:58

+4

你也忘了在循環重置'divisor'。 – 2015-02-09 18:23:11

回答

3

正如從意見明確,你忘了在循環isPrimedivisor值重置。爲了避免這樣的錯誤,最好只在使用它們的範圍內定義這些變量。

int main() 
{ 
    for(int i = 0; i < 100; i++) 
    { 
     cout << i << "\t"; 


     if (i == 0 || i == 1) 
      cout << "That number is not prime." << endl; 
     else if (i == 2) 
      cout << "That number is prime." << endl; 
     else if (i % 2 == 0) 
      cout << "That number is not prime." << endl; 
     else 
     { 
      bool isPrime = true; 
      int divisor = 3; 
      int sqrtNum = static_cast<int> (sqrt(static_cast<double>(i)));