您的位置:首页 > 其它

LeetCode 204. Count Primes

2016-10-31 10:54 316 查看

描述

找素数个数

解决

打表

class Solution {
public:
int countPrimes(int n) {
if (n <= 2)
return 0;
vector<int> arr(n + 1, 0);
for (int i = 2; i <= sqrt(n); ++i)
{
if (!arr[i])
for (int j = i * i; j <= n; j += i)
{
arr[j] = 1;
}
}
//cout << arr[2] << endl;
int j = 0;
for (int i = 2; i <= n; ++i)
{
if (!arr[i])
{
arr[j++] = i;
}
}
//cout << "j" << j << endl;
int l = 0, r = j - 1;
while (l <= r)
{
int m = (l + r) >> 1;
// cout << m << endl;
// cout << "arr[m]" << arr[m] << "n - 1" << n - 1 << endl;
if (arr[m] == n - 1)
{
//l = r = m;
break;
}
else if (arr[m] < n - 1)
{
l = m + 1;
}
else
r = m - 1;
//cout << "l = " << l << "r= " << r << endl;
// cout << "m=" << m << endl;
}
//cout << l << endl;
if (l > r)
return r + 1;
return l + 1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode