链接:https://leetcode-cn.com/problems/count-primes/
中文题目:
统计所有小于非负整数 n 的质数的数量。
英文题目:
Count the number of prime numbers less than a non-negative number, n.
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
思路:
埃拉托斯特尼筛法:一个数字的倍数肯定不是质数。从最小的质数2开始:2*2, 2*3, 2*4(仍旧小于n)依次更新数组。
题解:
class Solution {
public int countPrimes(int n) {
// 不是质数
boolean notPrimes[] = new boolean[n+1];
int count = 0;
for (int i = 2; i < n; ++i) {
if (notPrimes[i]) {
continue;
}
++count;
// 从i的平方开始呈倍数相乘,并更新位不是指数
for (long j = (long)i * i; j < n; j += i) {
notPrimes[(int)j] = true;
}
}
return count;
}
}