Count Prime
Count the number of prime numbers less than a non-negative number, n.
这题初看不难,判断素数只需要判断能否被1或其本身整除(优化之后可以仅判断2, 3, 4 ... sqrt(n)的数整除即可) 但这样判断会超时错误。这时候只能用筛选法 (Sieve of Eeatosthese)
先将p赋值为2,则p的倍数2p, 3p, 4p ... (xp < n) 都不可能为素数,做一个标记 p循环加1 一直到 p < n 的倍数都做一个标记 剩下的都是素数了 (注意0,1 不是素数)
public int countPrimes(int n) {
boolean[] flag = new boolean[n];
for (int i = 2; i < n; i++) {
for (int j = 2; i*j < n; j++) {
if (!flag[i*j]) {
flag[i*j] = true;
}
}
}
int count = 0;
for (int i = 2; i < n; i++) {
if (!flag[i]) {
count++;
}
}
return count;
}