问题描述:

Good Day,

I'm trying to make a code that would determine the prime numbers between two numbers. This should be done recursively and without any loop. So far I have this code:

#include<stdio.h>

#include<conio.h>

void prime(int x, int y){

int waa;

if(x <= y){

waa = isPrime(x);

if(waa==1 || waa == 0){

printf("");

}else{

printf("%5d",waa);

}

prime(x+1,y);

}

}

int isPrime(int n, int i){

i = 2;

if(i<n){

if(n%i==0 && n!=2 && n!=i){

return(0);

}else{

return(n);

}

i++;

isPrime(n,i);

}

}

void main(){

int num[2];

clrscr();

printf("Input 2 numbers: \n");

scanf("%d %d", &num[0], &num[1]);

prime(num[0], num[1]);

getch();

}

the output between 1 and 10 is: 2,2,3,5,7,9.

expected output: prime numbers 2,3,5,7

Would anyone be able to help me with this.

much appreciated

Thank you

网友答案:

It will be simpler if function isPrime just checks whether the given integer is prime or not and outputs a Boolean value.

#include<stdio.h>
#include <math.h>

void prime(int x, int y){
    int waa;
    if ( x == 1 ) x++;
    if(x <= y){
        waa = isPrime(x,2); // second input parameter added
        if(waa != 0){
            printf("%5d",x);
         }
        prime(x+1,y);
    }
}

int isPrime(int n, int i){
    if(n%i==0 && n!=2 && n!=i){
      return(0);
    } else {
       if (i < sqrt(n)) {
            return( isPrime(n,i+1) );
        } else
         return 1;
    }
}

int main(){
    int num[2];

    printf("Input 2 numbers: \n");
    scanf("%d %d", &num[0], &num[1]);
    prime(num[0], num[1]);
    return 0;
}

Input:

1
10

Output:

2 3 5 7

http://ideone.com/gyW7ED

相关阅读:
Top