「埃式篩法」求素數表的實現思路

思路背景

素數的要求是:只能被其自身和 1整除,因此可得,素數的倍數必定不是素數。
0和1不在素數考慮的範圍內,從2開始,二、3已經知道都是素數,因此能夠其爲「基」,去掉其倍數的數字。code

代碼實現的思路

能夠0和1,或者false和true來表示,是否被篩去,能夠一開始都設置爲false,而後經過二、3……不斷日後篩。
這樣,篩出的再也不考慮,留下的則必定是素數,由於在此以前沒有被篩掉,那隻能說明它只能被它自身整除了(1不考慮)io

具體的實現

#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;
}
相關文章
相關標籤/搜索