寻找素数算法实现

寻找默认从1开始的N个素数

void printPrime(int n, int column) {
    int prime = 2;
    printf("打印%d个素数
", n);
    for (int j = 0, odd = 1; j < n; odd++) {
        //生成一个素数
        bool fPrime = true;
        for (int k = 2; k <= sqrt(prime); k++)
            if (prime % k == 0) {
                fPrime = false;
                break;
            }
        if (fPrime) {//记录素数
            printf("%-6d ", prime);
            j++;
            if (j % column == 0) printf("
");
        }
        prime = odd * 2 + 1;//待判断的奇数
    }
}

从给定的任何正整数iStart处起,寻找N个素数

void printPrime(int iStart, int n, int column) {
    int prime = (iStart == 1) ? 2 : iStart;
    printf("从%d开始打印%d个素数
", iStart, n);
    //odd起始要跳过已经判断了的奇数
    for (int j = 0, odd = (iStart % 2 == 0) ? iStart / 2 : (iStart - 1) / 2 + 1;
        j < n; odd++) {
        //生成一个素数
        bool fPrime = true;
        for (int k = 2; k <= sqrt(prime); k++)
            if (prime % k == 0) {
                fPrime = false;
                break;
            }
        if (fPrime) {//记录素数
            printf("%-6d ", prime);
            j++;
            if (j % column == 0) printf("
");
        }
        prime = odd * 2 + 1;//待判断的奇数
    }
}

寻找范围内iStart~iEnd的所有素数,并统计个数

void printPrime(int iStart, int iEnd, int column,int &n) {
    int prime = (iStart == 1) ? 2 : iStart;
    printf("打印素数范围%d~%d
", iStart, iEnd);
    n = 0;
    //iEnd是奇数时,转换为未来奇数,并作为前一个奇数的临界条件
    iEnd = (iEnd % 2 == 0) ? iEnd / 2 : (iEnd - 1) / 2 + 1;
    for (int odd = (iStart % 2 == 0) ? iStart / 2 : (iStart - 1) / 2 + 1;
        odd <= iEnd; odd++) {
        //生成一个素数
        bool fPrime = true;
        for (int k = 2; k <= sqrt(prime); k++)
            if (prime % k == 0) {
                fPrime = false;
                break;
            }
        if (fPrime) {//记录素数
            printf("%-6d ", prime);
            n++;
            if (n % column == 0) printf("
");
        }
        prime = odd * 2 + 1;//待判断的奇数
    }
}

 所有代码均经过测试,结果正确。

原文地址:https://www.cnblogs.com/dalgleish/p/8832305.html