这道题是LeetCode里的第204道题。
题目描述:
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
这道题很有意思,使用的是 厄拉多塞筛法,基本思想是用一个记录数组记录是否为质,质数为 0,反之为合数。可以确定两点:
- x 是素数,x 的倍数肯定不是素数
- 若 x 不是素数,则肯定在 [1, x) 之前被筛掉。
解题代码:
class Solution {
public static int countPrimes(int n) {
if (n < 2)
return 0;
int[] nums = new int[n];
nums[1] = 1;
for (int i = 2; i <= (int) Math.pow(n, 0.5); i++) {
if (nums[i] == 0) {
for (int j = i * i; j < n; j = j + i) {
nums[j] = 1;
}
}
}
int sum = 0;
for (int i = 1; i < n; i++) {
if (nums[i] == 0) {
sum++;
}
}
return sum;
}
}
提交结果:

个人总结:
关于素数的分析和算法一直是数学家研究的难题,也有很多关于这方面的算法。
本文解析了LeetCode上的第204题——统计小于非负整数n的所有质数数量。通过使用厄拉多塞筛法,一种高效的算法来解决此问题,并详细介绍了其原理和代码实现。
1924

被折叠的 条评论
为什么被折叠?



