# Java Program to Count Primes in Ranges

Given a range [L, R], we need to find the count of total numbers of prime numbers in the range [L, R] where 0 <= L <= R < 10000. Consider that there are a large number of queries for different ranges.**Examples:**

Input : Query 1 : L = 1, R = 10 Query 2 : L = 5, R = 10 Output : 4 2 Explanation Primes in the range L = 1 to R = 10 are {2, 3, 5, 7}. Therefore for query, answer is 4 {2, 3, 5, 7}. For the second query, answer is 2 {5, 7}.

A **simple solution** is to do the following for every query [L, R]. Traverse from L to R, check if current number is prime. If yes, increment the count. Finally, return the count.

An **efficient solution** is to use Sieve of Eratosthenes to find all primes up to the given limit. Then we compute a prefix array to store counts till every value before limit. Once we have a prefix array, we can answer queries in O(1) time. We just need to return prefix[R] – prefix[L-1].

## Java

`// Java program to answer queries for ` `// count of primes in given range.` `import` `java.util.*;` ` ` `class` `GFG {` ` ` `static` `final` `int` `MAX = ` `10000` `;` ` ` `// prefix[i] is going to store count ` `// of primes till i (including i).` `static` `int` `prefix[] = ` `new` `int` `[MAX + ` `1` `];` ` ` `static` `void` `buildPrefix() {` ` ` ` ` `// Create a boolean array "prime[0..n]". A` ` ` `// value in prime[i] will finally be false` ` ` `// if i is Not a prime, else true.` ` ` `boolean` `prime[] = ` `new` `boolean` `[MAX + ` `1` `];` ` ` `Arrays.fill(prime, ` `true` `);` ` ` ` ` `for` `(` `int` `p = ` `2` `; p * p <= MAX; p++) {` ` ` ` ` `// If prime[p] is not changed, then` ` ` `// it is a prime` ` ` `if` `(prime[p] == ` `true` `) {` ` ` ` ` `// Update all multiples of p` ` ` `for` `(` `int` `i = p * ` `2` `; i <= MAX; i += p)` ` ` `prime[i] = ` `false` `;` ` ` `}` ` ` `}` ` ` ` ` `// Build prefix array` ` ` `prefix[` `0` `] = prefix[` `1` `] = ` `0` `;` ` ` `for` `(` `int` `p = ` `2` `; p <= MAX; p++) {` ` ` `prefix[p] = prefix[p - ` `1` `];` ` ` `if` `(prime[p])` ` ` `prefix[p]++;` ` ` `}` `}` ` ` `// Returns count of primes in range ` `// from L to R (both inclusive).` `static` `int` `query(` `int` `L, ` `int` `R)` `{` ` ` `return` `prefix[R] - prefix[L - ` `1` `]; ` `}` ` ` `// Driver code` `public` `static` `void` `main(String[] args) {` ` ` ` ` `buildPrefix();` ` ` `int` `L = ` `5` `, R = ` `10` `;` ` ` `System.out.println(query(L, R));` ` ` ` ` `L = ` `1` `; R = ` `10` `;` ` ` `System.out.println(query(L, R));` `}` `}` ` ` `// This code is contributed by Anant Agarwal.` |

**Output:**

2 4

Please refer complete article on Count Primes in Ranges for more details!