2014-12-10 2 views
0

이 코드는 올바른 것처럼 보이지만 출력 할 때 "2"라고 표시됩니다. 나는 여러 번 그것을 보려고했지만 매번 내가 틀린 것을 찾지 못했다. 그래서 나는 누군가 내가 다음과 같은 코드를 보면서 내가 뭘 잘못하고 있는지 알려주지 않을지 궁금해하고있다.C++에서 숫자가 소수인지 확인하는 방법

#include <iostream> 

using namespace std; 

bool oddOrEven(int x) 
{ 
    int divisor = 2; // initial divisor check 
    bool boolCheck = true; // initial boolean value set to true, later to check 

    for(int i = x-1; i >= 2;i--) 
    { 
     if(i%divisor == 0) 
      boolCheck = false; 
    } 

    return boolCheck; // returning whether or not the number is prime 
} 


int main() 
{ 
    int num1 = 0; 

    cout << "Please enter how many numbers you want to check: " << endl; 
    cin >> num1; 

    cout << "Prime numbers from 2-" << num1 << endl; 

    for(int i=num1; i >= 2; i--) 
    { 
     if(oddOrEven(i)) 
      cout << i << endl; 
    } 
} 

도움이 될만한 점은 제 부검 검사와 관련이있는 것 같지만 100 %는 아닙니다.

EDIT : 게시하기 전에 나는 내가 제수를 늘리지 않았다는 것을 깨달았습니다. 그래서 그것을 시도했지만 여전히 올바르게 나오지 않습니다. 내가 바뀐 것은 이랬다 :

for(int i = x-1; i >= 2;i--) 
{ 
    if(i%divisor == 0) 
     boolCheck = false; 
    divisor = divisor + 1; 
} 

그래서 나는 아직도 고민 중이다.

+1

나는 혼란 스럽다. "oddOrEven"== 모든 숫자의 집합입니다. –

+0

나는 당신이 무엇을 의미하는지 혼란 스럽다. oddOrEven (i)을 사용할 때를 의미합니까? – BpVx

+1

'oddOrEven (x)'는'isOdd (x) ||를 나타냅니다. isEven (x)'는 항상 'true'입니다. –

답변

3

잘못된 숫자를 나누는 중입니다. 당신은 아마 당신의 알고리즘은 최적의 거리가 멀다 알고 있음을 의미하며,

if (x % i == 0) 

이 줄

if(i%divisor == 0) 

을 변경합니다. 적어도 깃발을 설정하는 대신 return false하실 수 있습니다. 제수수는 x의 제곱근까지만 확인할 수 있습니다. 홀수 약수 만 확인할 수 있습니다. And so on.

+0

과 같은 다른 라이브러리가 필요하면 ... 와우 ... 너무 어리 석다 고 생각합니다. 고마워요. – BpVx

+0

@BpVx boolCheck를 false로 설정하는 대신 false를 반환하면 불필요한 루프가 중지됩니다. 그냥 말하는 :) – mhs

관련 문제