2014-12-04 3 views
0
#include <stdio.h> 
#include <math.h> 

int is_prime(int num); 
int next_pr(int num); 

int main() 
{ 
    int num; 
    scanf("%d", &num); 
    printf("%d\n", next_pr(num)); 

    return 0; 
} 

int next_pr(int num) 
{ 
    int c; 
    if (num == 2) 
     c = 3; 
    else 
    { 
     num += 2; 
     is_prime(num) ? next_pr(num) : c = num; 
    } 

    return c; 
} 

int is_prime(int num) 
{ 
    int i; 
    int c = 0; 
    // printf ("%f\n", sqrt (num)); 
    for (i = 2; i <= sqrt(num); ++i) 
    { 
     if (num % i == 0) 
      // printf ("%d\n",num%i); 
      c++; 
    } 
    return c; 
} 
+1

오신 것을 환영합니다 스택 오버플로. 곧 [About] 페이지를 읽으십시오. 코드를 편집기에 표시하거나 편집 상자에 표시 할 수 있습니다. 탭 대신 공백을 사용하십시오. 그것은 인생을 더 쉽게 만듭니다. 그런 다음, 끝나면 코드를 선택하고 편집 상자 위의 **'{}'** 버튼을 사용하여 코드를 들여 씁니다. –

+4

질문이 작성되지 않았습니다. 이 프로그램이 올바르지 않습니다. – BLUEPIXY

+3

코드 서식이 수정되었지만 질문 본문에는 질문이 없습니다. 귀하가 얻은 것에 대한 설명과 기대하는 바를 설명하고 문제를 해결하는 이유를 추가하십시오. –

답변

1
int next_pr(int num){ 
    int c; 
    if(num < 2) 
     c = 2; 
    else if (num == 2) 
     c = 3; 
    else if(num & 1){ 
     num += 2; 
     c = is_prime(num) ? num : next_pr(num); 
    } else 
     c = next_pr(num-1); 

    return c; 
} 

int is_prime(int num){ 
    if((num & 1)==0) 
     return num == 2; 
    else { 
     int i, limit = sqrt(num); 
     for (i = 3; i <= limit; i+=2){ 
      if (num % i == 0) 
       return 0; 
     } 
    } 
    return 1; 
} 
관련 문제