题目描述
Count the number of prime numbers less than a non-negative number, n.
Example:
Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
思路
筛法 O(n)。但是vector用bool比用unsigned char慢了好多。。。。
代码
class Solution {
public:
int countPrimes(int n) {
if (n <= 2) return 0;
vector<unsigned char> prime(n, 1);
prime[0] = prime[1] = 0;
for (long i=2; i<=sqrt(n); ++i) {
if (!prime[i]) continue;
for (long j=i*i; j<n; j+=i) {
prime[j] = 0;
}
}
return accumulate(prime.begin(), prime.end(), 0);
}
};

本文介绍了一种使用筛法在O(n)时间内计算小于非负数n的素数数量的算法。通过实例演示了如何使用C++实现该算法,包括初始化素数标记数组,迭代检查并标记合数,最后计算剩余素数的数量。
187

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



