Description:
Count the number of prime numbers less than a non-negative number, n.
这道题就是考察小于n的所有的质数的数量,直接遍历肯定超时,所以使用布尔数组来筛掉不符合条件的数字,该数字就不再进入下一层循环进行判断了。
代码如下:
import java.util.Arrays;
public class Solution
{
public int countPrimes(int n)
{
boolean[] vis= new boolean[n];
Arrays.fill(vis,false);
int cnt=0;
for(int i=2;i<n;i++)
{
if(vis[i]==false)
{
cnt++;
for(int j=2;j*i<n;j++)
vis[i*j]=true;
}
}
return cnt;
}
}
下面是C++的做法,使用数组做一次搜索空间递减,很棒的想法
代码如下:
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
class Solution
{
public:
int countPrimes(int n)
{
vector<bool> flag(n, false);
int count = 0;
for (int i = 2; i < n; i++)
{
if (flag[i] == false)
{
count++;
for (int j = 2; j*i < n; j++)
flag[j*i] = true;
}
}
return count;
}
};