统计所有小于非负整数 n 的质数的数量。
示例:
1 2 3
| 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
|
暴力方法会超时,我们使用厄拉多塞筛法。
该方法的核心是,一个质数的倍数不会是质数。具体来说,2 是质数,那么 4 ,6,8 … 不会是质数。
我们使用一个数组来存储是否为质数的标记。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public int countPrimes(int n) { int count = 0; boolean[] book = new boolean[n];
for(int i = 2; i < n; i++){ if(!book[i]){ ++count; for(int j = i; j < n; j += i){ book[j] = true; } } } return count; } }
|