数が素数の場合は1を返し、それ以外の場合は0を返す再帰関数を実装する必要があります。宿題の問題は、「%」modを使用できないことを示しています。Haskellはこのようなものでなければなりません...わかりません。
isprime x = prime(x sqrt(x))
prime x i = | i==1 = 1
| mod(x i)==0 = 0
| otherwise = prime(x i-1)
mod num div | num<div = n
| otherwise = mod(num-div div)
MacにHaskellコンパイラがないため、Cでアルゴリズムをテストしましたが、で誤検知が返されるため、何か問題がありprimes-1
ます。idkなぜ。
int main (int argc, const char * argv[]){
int a=0,b=31;
printf("\n Prime numbers between %d and %d \n",a,b);
for(int a=0; a<=b; a++){
if(isPrime(a)==0){
printf("%d, ",a);
}
}
return 0;
}
int isPrime(int x){
return prime(x, sqrt(x));
}
int prime(int x, int i){
if(i==0){
return 0;
}
else if(mod(x,i)==1){
return 1;
}
else{
return prime(x, i-1);
}
}
int mod(int num, int div){
if(num<div) return num;
else return mod(num-div, div);
}
アルゴリズムはこれを返します:
Prime numbers between 0 and 31
0, 1, 2, 3, 4, 6, 8, 12, 14, 18, 20, 24, 30,
Program ended with exit code: 0