Description:
Count the number of prime numbers less than a non-negative number, n.
这个题有考数学的感觉,使用dynamic programming 应该是一种比较好的解法,从2开始,依次将prime number 的倍数置为不是prime number.
对于prime number 不置,因为当它被置成非prime number时,它的倍数已经被置过。所以就是使用dynamic programming 维护一个n维数组
public class Solution {
public int countPrimes(int n) {
if (n <= 2)
return 0;
// init an array to track prime numbers
boolean[] primes = new boolean[n];
for (int i = 2; i < n; i++)
primes[i] = true;
for (int i = 2; i <= Math.sqrt(n - 1); i++) {
// or for (int i = 2; i <= n-1; i++) {
if (primes[i]) {
for (int j = i + i; j < n; j += i)
primes[j] = false;
}
}
int count = 0;
for (int i = 2; i < n; i++) {
if (primes[i])
count++;
}
return count;
}
}