在C中打印0到1,000,000之间的素数

时间:2017-01-04 12:04:52

标签: c recursion global-variables primes

我试图写一个递归函数来打印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而没有别的。我似乎无法发现问题。它可能是全局变量。

1 个答案:

答案 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;
}

更快