素數的要求是:只能被其自身和 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; }