我试图写一个递归函数来打印0到1,000,000之间的所有素数:
#include <stdio.h>
int isPrime(int);
int globalChk; //Global Variable
int main(){
printf("2\n");
int i;
for(i=3;i<1000000;i++){
globalChk = i/2;
if(isPrime(i)==1){
printf("%d",i);
printf("\n");
}
}
return 0;
}
int isPrime(int num){
if(globalChk==1){
return 1;
}
else{
if(num%globalChk==0) {
return 0;
}
else {
globalChk = globalChk-1;
isPrime(num);
}
}
}
此刻它似乎只是打印2和3而没有别的。我似乎无法发现问题。它可能是全局变量。
答案 0 :(得分:4)
首先
所有素数都是平方根
所以你可以按照
进行外循环int n=sqrt(1000000);
for(int i=3;i<=n;i++)
{
}
您可以通过以下方式改进isPrime功能
bool isPrime(int n) {
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n%2 == 0 || n%3 == 0)
return false;
for (int i=5; i*i<=n; i=i+6)
if (n%i == 0 || n%(i+2) == 0)
return false;
return true;
}
更快