204 计数质数
本文最后更新于:2022年4月9日 中午
统计所有小于非负整数 n
的质数的数量。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
0 <= n <= 5 * 106
Solution
参考:《算法小抄》5.1 、**@yiluoyion**
- 暴力解法,超时
1 |
|
- 埃氏筛
埃氏筛的原理:从 2 开始,将每个质数的倍数都标记为合数。同样的,标记到$\sqrt{n}$停止。
假设一个数 i 为质数时,那么此时大于 i 且是 i 的倍数的数一定不是质数,例如 2i,3i..。那么我们将这些不是质数的数进行标记。
这里需要注意,标记应该从 i * i 开始,而不是 2 * i 开始。因为对于每个数 i 来说,枚举是从小到大的,此时前面数字的倍数都已经进行了标记。对于 i 而言,2 * i 也肯定会被在枚举数字 2 时进行标记,[2, i) 区间的数同理。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!