1. 程式人生 > >Leetcode題解之數學問題(2) 計算質數

Leetcode題解之數學問題(2) 計算質數

題目:https://leetcode-cn.com/problems/count-primes/

題目描述:

統計所有小於非負整數 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

您是否在真實的面試環節中遇到過這道題目呢?  

是的

沒有

 

  • 思路: 用一個boolean 陣列記錄是否能為2或3的倍數。一個質數除了2,3意外都無法整除2,3。這裡判斷除完之後是否為整數比較難操作。所以逆向思維,記錄為2,3倍數的位置。如果沒被標記的就為質數。

 

 

class Solution {
    public int countPrimes(int n) {
        int count = 0;
        boolean[] flag = new boolean[n];
        for(int i = 2;i < n;i++){
            if(flag[i] == false){
                count++;
                for(int j = 1;j * i < n;j++)
                    flag[j*i] = true;
            }
        }
        return count;
    }
}