# Python3 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].

## Python3

`# Python3 program to answer queries for ` `# count of primes in given range.` `MAX` `=` `10000` ` ` `# prefix[i] is going to` `# store count of primes` `# till i (including i).` `prefix ` `=` `[` `0` `]` `*` `(` `MAX` `+` `1` `)` ` ` `def` `buildPrefix():` ` ` ` ` `# Create a boolean array value in` ` ` `# prime[i] will "prime[0..n]". A ` ` ` `# finally be false if i is Not a` ` ` `# prime, else true.` ` ` `prime ` `=` `[` `1` `]` `*` `(` `MAX` `+` `1` `)` ` ` ` ` `p ` `=` `2` ` ` `while` `(p ` `*` `p <` `=` `MAX` `): ` ` ` ` ` `# If prime[p] is not changed, ` ` ` `# then it is a prime` ` ` `if` `(prime[p] ` `=` `=` `1` `):` ` ` ` ` `# Update all multiples of p` ` ` `i ` `=` `p ` `*` `2` ` ` `while` `(i <` `=` `MAX` `):` ` ` `prime[i] ` `=` `0` ` ` `i ` `+` `=` `p` ` ` `p` `+` `=` `1` ` ` ` ` `# Build prefix array` ` ` `# prefix[0] = prefix[1] = 0;` ` ` `for` `p ` `in` `range` `(` `2` `,` `MAX` `+` `1` `): ` ` ` `prefix[p] ` `=` `prefix[p ` `-` `1` `]` ` ` `if` `(prime[p]` `=` `=` `1` `):` ` ` `prefix[p]` `+` `=` `1` ` ` `# Returns count of primes ` `# in range from L to` `# R (both inclusive).` `def` `query(L, R):` ` ` `return` `prefix[R]` `-` `prefix[L ` `-` `1` `]` ` ` `# Driver code` `if` `__name__` `=` `=` `'__main__'` `:` ` ` `buildPrefix()` ` ` ` ` `L ` `=` `5` ` ` `R ` `=` `10` ` ` `print` `(query(L, R))` ` ` ` ` `L ` `=` `1` ` ` `R ` `=` `10` ` ` `print` `(query(L, R))` ` ` `# This code is contributed by mits.` |

**Output:**

2 4

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