leetCode 204 計數質數 : 厄拉多塞篩法求質數

經過此題了解了下厄拉多塞篩法求質數:以下圖

該算法在尋找素數時,採用了一種不同凡響的方法:先將 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等倍數的值「劃去」(設爲falsefor (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;
    }
複製代碼
相關文章
相關標籤/搜索