![[LeetCode]204. 计数质数(java实现)筛质数模板题、线性筛法,第1张 [LeetCode]204. 计数质数(java实现)筛质数模板题、线性筛法,第1张](/aiimages/%5BLeetCode%5D204.+%E8%AE%A1%E6%95%B0%E8%B4%A8%E6%95%B0%EF%BC%88java%E5%AE%9E%E7%8E%B0%EF%BC%89%E7%AD%9B%E8%B4%A8%E6%95%B0%E6%A8%A1%E6%9D%BF%E9%A2%98%E3%80%81%E7%BA%BF%E6%80%A7%E7%AD%9B%E6%B3%95.png)
- 1. 题目
- 2. 读题(需要重点注意的东西)
- 3. 解法
- 4. 可能有帮助的前置习题
- 5. 所用到的数据结构与算法思想
- 6. 总结
思路(筛质数——线性筛法):
因此时间复杂度是O(n)的
线性筛法的证明详见[AcWing]868. 筛质数(C++实现)线性筛模板题
3. 解法---------------------------------------------------解法---------------------------------------------------
class Solution {
public int countPrimes(int n) {
boolean[] st = new boolean[n];
List<Integer> primes = new ArrayList<>();
for(int i = 2;i < n;i++){ // 注意1既不是质数也不是合数
if(!st[i]) primes.add(i);
for(int j = 0;i * primes.get(j) < n;j++){
st[i * primes.get(j)] = true; // 筛合数
if(i % primes.get(j) == 0) break; // break保证了只筛一次
}
}
return primes.size();
}
}
可能存在的问题:
4. 可能有帮助的前置习题- [AcWing]868. 筛质数(C++实现)线性筛模板题
- 线性筛
线性筛筛质数的模板题,背下来!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)