2016-06-28 1 views
-5

소수를 테스트하는 C++ 알고리즘을 작성하십시오.C++을 사용하여 정수의 소수성 찾기

#include<iostream> 
#include<cmath> 

using namespace std; 

int x,n; 
bool isprime(int); 

int main() 
{ 
    cout<<"Enter prime no"<<endl; 
    cin>>x; 
    for (n=2;n<=floor(sqrt(x));n++) 
    { 
     if (x==1) 
      cout<<"not prime"<<endl; 
     else if (x%n==0) 
      cout<<"is not prime"<<endl; 
     else 
      cout<<"prime"<<endl; 
    } 
} 

를 다음과 같이 내 C++ 코드는하지만 난이 programn을 실행할 때 내 출력 난 점점 계속 예를 들어 잘 보이지 않는다 대답은 명확 때입니다 prime.The 없다 "소수"

else if (x%n==0) 
cout<<"is not prime"<<endl; 
성명의

부분이 제대로 excuteded 것으로 보인다. 아무도 내 코드를 잘못 설명해 줄 수 있습니까? 감사합니다

+1

디버거를 사용하지 않았다면 지금 방법을 배워야합니다. 디버거를 사용하면 변수와 변수의 값을 모니터링하면서 코드를 단계별로 실행하고 변수가 어떻게 변하는 지 확인할 수 있습니다. 이렇게하면 문제를 꽤 빨리 발견 할 수 있습니다. –

+0

'for' 루프의 첫 번째 반복 과정에서 결정을 내리고 있습니다. 정수가 소수인지 확인하려면 전체 루프를 실행해야합니다. 더 나은 비주얼 코드 흐름을 얻으려면 서식을 수정해야합니다. – IInspectable

+0

'x = 9' .'x'는'n = 2'로 나눌 수 없습니다. 그럼 당신은 소수로 출력 할 것입니다. 지금까지는'n = 3'을 확인하지 않았습니다. 힌트 : 모든 제수를 확인하고 그것이 소수인지 여부를 결정할 수 있습니다. –

답변

2

루프는 x의 제수가 아닌 각각에 대해 "소수"를 출력합니다. 루프가 종료되지 않은 경우 첫 번째 "소수가 아닌"히트 이후에 루프를 종료하고 "소수"만 출력해야합니다.

1

우도 클라인 (Udo Klein)의 제안에 따르면, 숫자가 소수가 아닌 것으로 감지되면 루프에서 빠져 나가야합니다. 또한 x이 루프 내에서 하나와 동일한 지 확인할 필요가 없습니다.

#include<iostream> 
#include<cmath> 

int main() 
{ 
    int x; 
    std::cout << "Enter prime no" << std::endl; 
    std::cin >> x; 

    if (x == 1) 
    { 
     std::cout << "not prime" << std::endl; 
     return 1; 
    } 

    for (int n = 2; n <= floor(sqrt(x)); n++) 
    { 
     if (x % n == 0) 
     { 
      std::cout << "is not prime" << std::endl; 
      return 1; 
     } 
    } 
    std::cout << "prime" << std::endl; 
    return 0; 
}