2016-10-25 1 views
1

N 번째 소수를 인쇄해야합니다. 예 :
첫 번째 소수는 2
두 번째 소수는 3
입니다.
.
1) 2, 3 스택에 추가 :
10 일 소수는 다음과 같이

Nth 소수 인쇄 코드

내 알고리즘입니다 .... (29) 등이다.
2) 만약 N < 스택 = 크기) 4
주요 각 요소에서, 소수에 대한 격차를 확인하려면 있는지 확인, 위치 N 출력 응답
3) 그 밖에, 스택의 마지막 요소에서 시작에서 항목을 가져 오기 스택. 스택에있는 모든 요소에 대해 나머지 0 인 경우 소수가 아닙니다.

#include <iostream> 
using namespace std; 

int main() { 
    int number, count = 0; 
    cin >> number;   //position of prime number 
    int a[number]; 
    a[0] = 2; 
    a[1] = 3; 
    int top = 1; 
    if (number <= 2) { 
     cout << a[number - 1] << endl; 
    } else { 
     for (int i = 5; i <= 10001; i += 2) { 
      for (int j = 0; j <= top; j++) { 

       if (i % a[j] != 0) { 
        count++; 

       } 
       if (count == (top + 1)) { 
        a[++top] = i; 
        if ((count + 1) == number) { 
         cout << a[top]; 
         break; 
        } 

       } 

      } 

     } 

    } 
    return 0; 
} 

갑자기 어떤 output.What을 포기하지 않고 작동을 멈 춥니이 코드는 다음과 같습니다 브레이크 루프
5) 국무하면,
6) 검색 홀수 번호

내 코드가 스택에 추가 내 코드에 결함이 있습니까?

+0

왜 항상 2 씩 증가하고 숫자가 홀수가되도록 보장하면 배열의 첫 번째 숫자로 나눕니까? 그 수표는 불필요합니다. –

+0

@ LuisColorado 왜냐하면 aprime number는 항상 홀수가 될 것이기 때문입니다 ... 기본적으로 시간 복잡성을 줄이기 위해서 – user6889367

+0

@LuisColorado 그러나이 코드는 더 큰 숫자에 대해서는 여전히 시간이 걸립니다. 도와 주실 수 있습니까? – user6889367

답변

1

로 쓰고 싶습니다. 당신의 루핑 로직에 문제가 있습니다. 당신은 i0에서 top까지의 모든 숫자로 나누어 재 계산해야합니다. i으로 나눌 수 없습니다. 중 하나만 증가시킬 수 있습니다. 그것은 그들 중 누구에게나 나누어 떨어지지 않는 한 당신이 그것을 키우고 있기 때문입니다.

따라서 ia[j]으로 나눌 수 있는지 테스트 논리로 변경하십시오. 그럴 경우 루프에서 빠져 나오십시오. 루프 (j == top)의 끝 부분에 도달했으나 성공적으로 분할하지 않은 경우에는 소수임을 알고 count을 증가시킬 수 있습니다. 또한, 당신이 top로 계산 비교 체크는 j 루프 (당신은 모든 시험 분열을 행한 즉 후)

for (int i = 5; i <= 10001; i += 2) { 
     for (int j = 0; j <= top; j++) { 
      if (i % a[j] == 0) { 
       break; 
      } 
      if(j == top) 
      { 
       count++; 
       a[++top] = i; 
       break; 
      } 
     } 
     if (count == number) { 
      cout << a[top]; 
      break; 
     } 
    } 

편집의 외부해야한다 : 당신은 또한에, 2로하지 0 count를 초기화해야 2와 3을 고려해야합니다.

+0

선생님, 나는 프라임으로 25를 얻고 있습니다. 또한 제 3 소수는 7로 표시됩니다. – user6889367

+0

카운트를 초기화해야합니다. = 2, 계정을 위해 코드를 편집했습니다. – samgak

+0

알겠습니다, 됐습니다. – user6889367

0

int a[number];은 (는) number이 상수가 아닙니다. 오히려 당신이 그것을

+0

아니요, 코드는 여전히 작동하지 않습니다 ...하지만 int [number]는 문제가 아닙니다. 다른 많은 코드에서 시도해 보았습니다. – user6889367

+0

@macroland, 저는 C++에서 두려워요. 런타임시 길이가 결정되는 자동 배열을 사용하십시오. 질문은 C++가 아닌 태그가 붙어 있으므로 여기서는 오류가 아니라고 생각합니다. 그건 그렇고,이 답변은 질문되는 문제를 해결합니까? –

+0

@LuisColorado : 네 말이 맞아, 나중에 깨달았다. – macroland