2014-01-11 4 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++ 프라임 숫자가 정답을주지 않음

저는 i와 n에 대해 double과 int 사이를 변경하려고했습니다.

3을 입력하면 소수를 표시합니다.

문제는 일부 소수를 소수가 아닌 것으로 표시한다는 것입니다.

+0

대신 n의 제곱근을 얻습니다. 당신은 for 루프 조건을'i * i <= n'으로 가질 수 있습니다. 이것은'i <= sqrt_of_n'과 같습니다. –

답변

7

for 루프의 본문에 i이 전혀 사용되지 않습니다.

특히, n % 1은 0 일 때, 임의의 정수인 경우 n입니다. n 당신은 쉽게 실수로 자신 단계별 실행하여 디버거에서 발견하고, 다양한을 수 있었다 1.

로 나눌 경우

은 아마도 당신은 ni로 나누어이지만, 실수로 확인 여부를 알고 싶어 서브 표현식을 "표현식보기".

+0

두려움없이 C++이라는 책에서 바로 예제를 복사했습니다. 이것이 책이 보여주는 방법입니다. 이 오류를 어떻게 해결합니까? – user3175649

+1

@ user3175649 이것이 책에서 나온 것이라면 다른 책을 가져 가십시오. – Johan

+1

@ user3175649 : 다른 사람의 코드를 복사했을 수도 있습니다. 어떤 점에서,'i'는'1'로 기록되었습니다. 나는 당신이 오류를 만들었는지 또는 사전 출판 과정에서 발생했는지 여부를 모른다. 내가 말한 것에 대해 생각해보십시오. 저는 직접 대답을하지는 않겠지 만 여기에는 많은 단서가 있습니다. –

관련 문제