“埃式筛法”求素数表的实现思路

思路背景

素数的要求是:只能被其自身和 1整除,所以可得,素数的倍数一定不是素数。
0和1不在素数考虑的范围内,从2开始,2、3已经知道都是素数,所以可以其为“基”,去掉其倍数的数字。

代码实现的思路

可以0和1,或者false和true来表示,是否被筛去,可以一开始都设置为false,然后通过2、3……不断往后筛。
这样,筛出的不再考虑,留下的则一定是素数,因为在此之前没有被筛掉,那只能说明它只能被它自身整除了(1不考虑)

具体的实现

#include <cstdio>
const int MAXN = 101;
int prime[MAXN], numP = 0;
bool p[MAXN] = {0};

void findPrime() {
    for (int i = 2; i < MAXN; i++) {
        if (!p[i]) {
            prime[numP++] = i;
            for (int j = i + i; j < MAXN; j += i) {
                p[j] = 1;
            }
         }
    }
}

int main()
{
    findPrime();
    for (int i = 0; i < numP; i++) {
        printf("%d ", prime[i]);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ZealYoung/p/11164973.html