2014-01-11 63 views
0
#include <iostream> 
#include <cmath> 

using namespace std; 
bool prime(int n); 

int main() 
{ 
    double i; 

    while (true) 
    { 
     cout << "Enter a number that isn't 0: "; 
     cin >> i; 
      if (i == 0) 
       break; 
      if(prime(i)) 
       cout << i << " is prime" << endl; 
      else 
       cout << i << " is not prime." << endl; 
    } 
    system ("Pause"); 
    return 0; 
} 

bool prime (int n) 
{ 
    int i; 
    double sqrt_of_n = sqrt(double (n)); 
    for (i = 2; i <= sqrt_of_n; i++) 
     { 
      if (int(n) % 1 == 0) 
      return false; 
     } 
    return true; 
} 

每次我運行該程序,如果我輸入7,我得到7不是素數。有人能幫我弄清楚我搞亂了什麼嗎?C++素數沒有給出正確的答案

我試着改變雙和int之間我和n。

如果我輸入3,它顯示素數。

問題是它顯示一些素數不是素數。

+0

而不是得到n的平方根。你可以將你的for循環條件設置爲'i * i <= n',它與'i <= sqrt_of_n'相同 –

回答

7

for for循環的主體完全不使用i

特別是,n % 1總是爲零,對於任何積分n

想必你想知道n是否整除i,卻意外地檢查是否n是整除1

你可以很容易地發現這個錯誤自己通過單步執行在調試器中,並且使各種將子表達式轉換爲「監視表達式」。

+0

我直接從一本名爲C++的書中直接複製了這個例子。這就是本書展示的方式。我該如何彌補這個錯誤? – user3175649

+1

@ user3175649如果這確實來自一本書,拿另一本書... – Johan

+1

@ user3175649:我以爲你可能已經複製了別人的代碼。在某個時候,'i'被轉錄爲'1',因爲兩者看起來非常相似。我不知道你是否犯了這個錯誤,或者是在預發佈過程中發生了錯誤。想想我說的,我不會直接給你答案,但是這裏有很多線索。 –

相關問題