2014-01-11 3 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++ Prime Номер не дает правильного ответа

Я попытался изменить между double и int для i и n.

Если я ввожу 3, он отображает штрих.

Проблема в том, что она показывает некоторые простые числа как не простые.

+0

вместо получения квадратного корня n. вы можете иметь условие для цикла for как «i * i <= n', это то же самое, что« i <= sqrt_of_n' –

ответ

7

Тело вашего петли не использует i.

В частности, n % 1 всегда равен нулю, для любого интеграла n.

Предположительно вы хотите знать, является ли n делится на i, но случайно проверил, если n делится на 1.

Вы легко обнаружили эту ошибку сами по пошаговом в отладчике, и делая различные подвыражения в «наблюдательные выражения».

+0

Я скопировал пример прямо из книги под названием C++ без страха. Вот как это показывает книга. Как устранить эту ошибку? – user3175649

+1

@ user3175649 Если это происходит из книги, возьмите другую книгу ... – Johan

+1

@ user3175649: Я думал, что вы скопировали чужой код. В какой-то момент «я» транскрибировался как «1», потому что они выглядят очень похожими. Я не знаю, произошла ли ошибка или произошла ли она во время процесса предварительной публикации. Подумайте о том, что я сказал, я не буду прямо давать вам ответ, но здесь есть много подсказок. –

Смежные вопросы