-3

再会,

我正在尝试编写一个代码来确定两个数字之间的质数。这应该递归地完成并且没有任何循环。到目前为止,我有这个代码:

#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();
}

1到10之间的输出是:2,2,3,5,7,9。预期输出:素数 2,3,5,7

任何人都可以帮助我解决这个问题。

非常感激

谢谢

4

1 回答 1

1

如果函数 isPrime 仅检查给定整数是否为素数并输出布尔值,则会更简单。

#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;
}

输入:

1
10

输出:

2 3 5 7

http://ideone.com/gyW7ED

于 2013-09-15T16:16:14.473 回答