該算法在尋找素數時,採用了一種不同凡響的方法:先將 2-N 的各數放入表中,而後在 2 的上面畫一個圓圈,而後劃去 2 的其餘倍數;第一個既未畫圈又沒有被劃去的數是 3,將它畫圈,再劃去 3 的其餘倍數;如今既未畫圈又沒有被劃去的第一個數是 5,將它畫圈,並劃去5的其餘倍數……依次類推,一直到全部小於或等於N的各數都畫了圈或劃去爲止。算法
這時,表中畫了圈的以及未劃去的那些數正好就是小於 N 的素數。數組
所以代碼以下:bash
public int countPrimes(int n) {
//創建數組
boolean[] nums = new boolean[n];
//將2-N之間的數據設爲true
for (int i = 2;i<n;i++){
nums[i] = true;
}
//將二、三、5等倍數的值「劃去」(設爲false)
for (int i = 2;i*i < n;i++) {
if (nums[i]) {
for (int j = 2;j*i<n;j++) {
nums[j*i] = false;
}
}
}
int res = 0;
//最後取出爲true的值,即爲2-N之間畫圈的數據
for (boolean num : nums) {
res+= num?1:0;
}
return res;
}
複製代碼