篩選法具體步驟:
以篩選15以內的素數爲例
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1)從2開始(1不是素數),2是素數,因此2的倍數一定不是素數,故排除了4、6、8、10、12、14
,將數組不是素數的位置直接置零
0,2,3,0,5,0,7,0,9,0,11,0,13,0,15
2)判斷3位置是否爲零,爲零說明已經被排除,肯定不是素數,不是零,因此3的倍數一定不是素數,故排除了6、9、12、15
0,2,3,0,5,0,7,0,9,0,11,0,13,0,15
3)4位置爲零,判斷下一個
0,2,3,0,5,0,7,0,9,0,11,0,13,0,15
4)5位置不爲零,排除10、15
0,2,3,0,5,0,7,0,9,0,11,0,13,0,0
5)6位置爲零,判斷下一個
0,2,3,0,5,0,7,0,9,0,11,0,13,0,15
…
最後數組中所有非素數位置都變爲了零,非零位置就是我們需要找到的素數
void Screening(int size) {
//1不是素數,從2開始循環
int *arr = new int[size];
for (int i = 0; i < size; ++i) {
arr[i] = i;
}
for (int i = 2; i < size; ++i) {
if (arr[i] != 0) {
//arr[i]的倍數一定不是素數
for (int j = 2 * i; j < size; ++j) {
if (arr[j] % arr[i] == 0)
arr[j] = 0;
}
}
}
//循環輸出所有素數,爲零的位置不是素數,非零位置是素數
for (int i = 2; i < size; ++i) {
if (arr[i] != 0)
printf("%d ", arr[i]);
}
}