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

Добро пожаловать в переполнение стека. Вскоре прочитайте страницу [О программе]. Напишите код, как вы хотели бы его увидеть, возможно, в редакторе, возможно, в поле редактирования. Убедитесь, что вы используете пробелы вместо вкладок; это облегчает жизнь. Затем, когда вы закончите, выберите код и используйте кнопку ** '{}' ** над полем редактирования, чтобы отступить его. –

+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; 
} 
Смежные вопросы