美好的一天,
我正在尝试制作一个能够确定两个数字之间的素数的代码。这应该递归地完成,没有任何循环。到目前为止,我有这段代码:
#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
是否有人能够帮助我。
非常感谢
谢谢
答案 0 :(得分: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