# 204. Count Primes (Easy)

https://leetcode.com/problems/count-primes/

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.
```

## Solutions

``````class Solution {

// Thinking transformation， tag all the non-primes

public int countPrimes(int n) {

// Used to keep all the non-primes.
boolean[] primeOrNot = new boolean[n];
Arrays.fill(primeOrNot, true);

// must be <= n/2, not < n/2
for (int i = 2; i <= n / 2; i++) {
for (int j = 2; i * j < n; j++) {
primeOrNot[i * j] = false;
}
}

int ans = 0;
for (int i = 2; i < n; i++) {
if (!primeOrNot[i]) {
continue;
}

ans++;
}

return ans;
}
}
``````

## Incorrect Solutions

### 1.

``````class Solution {

// Still hardly suffice for efficiency requirements.

public int countPrimes(int n) {

// Used to keep all the non-primes.
boolean[] primeOrNot = new boolean[n];
Arrays.fill(primeOrNot, true);

for (int i = 2; i < n; i++) {
if (!primeOrNot[i]) {
continue;
}

int x = (int) Math.sqrt(i);

for (int j = 2; j <= x; j++) {
if (i % j != 0) {
continue;
}

primeOrNot[i] = false;

break;
}
}

int ans = 0;
for (int i = 2; i < n; i++) {
if (!primeOrNot[i]) {
continue;
}

ans++;
}

return ans;
}
}
``````

### 2.

``````class Solution {

// Using Set structure to keep the non-prime elements will dramatically slow down the speed.

public int countPrimes(int n) {

// Used to keep all the non-primes.
Set<Integer> primeOrNot = new HashSet<>();

for (int i = 2; i < n; i++) {
for (int j = 2; j * j <= i; j++) {
if (i % j != 0) {
continue;
}

break;
}
}

int ans = 0;
for (int i = 2; i < n; i++) {
if (primeOrNot.contains(i)) {
continue;
}

ans++;
}

return ans;
}
}
``````