# Range Queries for finding the Sum of all even parity numbers

Given Q queries where each query consists of two numbers L and R which denotes a range [L, R]. The task is to find the sum of all Even Parity Numbers lying in the given range [L, R].

Parity of a number refers to whether it contains an odd or even number of 1-bits. The number has Even Parity if it contains even number of 1-bits.

Examples:

Input: Q = [ [1, 10], [121, 211] ]
Output:
33
7493
Explanation:
binary(1) = 01, parity = 1
binary(2) = 10, parity = 1
binary(3) = 11, parity = 2
binary(4) = 100, parity = 1
binary(5) = 101, parity = 2
binary(6) = 110, parity = 2
binary(7) = 111, parity = 3
binary(8) = 1000, parity = 1
binary(9) = 1001, parity = 2
binary(10) = 1010, parity = 2
From 1 to 10, 3, 5, 6, 9 and 10 are the Even Parity numbers. Therefore the sum is 33.
From 121 to 211 the sum of all the even parity numbers is 7493.

Input: Q = [ [ 10, 10 ], [ 258, 785 ], [45, 245], [ 1, 1000]]
Output:
10
137676
14595
250750

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:
The idea is to use a Prefix Sum Array. The sum of all Even Parity Numbers till that particular index is precomputed and stored in an array pref[] so that every query can be answered in O(1) time.

1. Initialise the prefix array pref[].
2. Iterate from 1 to N and check if the number has even parity or not:
• If the number is Even Parity Number then, the current index of pref[] will store the sum of Even Parity Numbers found so far.
• Else the current index of pref[] is same as the value at previous index of pref[].
3. For Q queries the sum of all Even Parity Numbers for range [L, R] can be calculated as follows:
```sum = pref[R] - pref[L - 1]
```

Below is the implementation of the above approach

## C++

 `// C++ program to find the sum ` `// of all Even Parity numbers ` `// in the given range ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// pref[] array to precompute ` `// the sum of all Even ` `// Parity Numbers ` `int` `pref = { 0 }; ` ` `  `// Function that returns true ` `// if count of set bits in ` `// x is even ` `int` `isEvenParity(``int` `num) ` `{ ` `    ``// Parity will store the ` `    ``// count of set bits ` `    ``int` `parity = 0; ` `    ``int` `x = num; ` `    ``while` `(x != 0) { ` `        ``if` `(x & 1) ` `            ``parity++; ` `        ``x = x >> 1; ` `    ``} ` ` `  `    ``if` `(parity % 2 == 0) ` `        ``return` `num; ` `    ``else` `        ``return` `0; ` `} ` ` `  `// Function to precompute the ` `// sum of all even parity ` `// numbers upto 100000 ` `void` `preCompute() ` `{ ` `    ``for` `(``int` `i = 1; i < 100001; i++) { ` ` `  `        ``// isEvenParity() ` `        ``// return the number i ` `        ``// if i has even parity ` `        ``// else return 0 ` `        ``pref[i] = pref[i - 1] ` `                  ``+ isEvenParity(i); ` `    ``} ` `} ` ` `  `// Function to print sum ` `// for each query ` `void` `printSum(``int` `L, ``int` `R) ` `{ ` `    ``cout << (pref[R] - pref[L - 1]) ` `         ``<< endl; ` `} ` ` `  `// Function to print sum of all ` `// even parity numbers between ` `// [L, R] ` `void` `printSum(``int` `arr, ``int` `Q) ` `{ ` ` `  `    ``// Function that pre computes ` `    ``// the sum of all even parity ` `    ``// numbers ` `    ``preCompute(); ` ` `  `    ``// Iterate over all Queries ` `    ``// to print sum ` `    ``for` `(``int` `i = 0; i < Q; i++) { ` `        ``printSum(arr[i], ` `                 ``arr[i]); ` `    ``} ` `} ` `// Driver code ` `int` `main() ` `{ ` `    ``// Queries ` `    ``int` `N = 2; ` `    ``int` `Q = { { 1, 10 }, ` `                    ``{ 121, 211 } }; ` ` `  `    ``// Function that print ` `    ``// the sum of all even parity ` `    ``// numbers in Range [L, R] ` `    ``printSum(Q, N); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find the sum ` `// of all Even Parity numbers ` `// in the given range ` `import` `java.io.*;  ` `import` `java.util.*;  ` ` `  `class` `GFG {  ` `     `  `// pref[] array to precompute ` `// the sum of all Even ` `// Parity Numbers ` `static` `int``[] pref = ``new` `int``[``100001``]; ` ` `  `// Function that returns true ` `// if count of set bits in ` `// x is even ` `static` `int` `isEvenParity(``int` `num) ` `{ ` `     `  `    ``// Parity will store the ` `    ``// count of set bits ` `    ``int` `parity = ``0``; ` `    ``int` `x = num; ` `     `  `    ``while` `(x != ``0``) ` `    ``{ ` `        ``if` `((x & ``1``) == ``1``) ` `            ``parity++; ` `             `  `        ``x = x >> ``1``; ` `    ``} ` `     `  `    ``if` `(parity % ``2` `== ``0``) ` `        ``return` `num; ` `    ``else` `        ``return` `0``; ` `} ` ` `  `// Function to precompute the ` `// sum of all even parity ` `// numbers upto 100000 ` `static` `void` `preCompute() ` `{ ` `    ``for``(``int` `i = ``1``; i < ``100001``; i++) ` `    ``{ ` ` `  `       ``// isEvenParity() ` `       ``// return the number i ` `       ``// if i has even parity ` `       ``// else return 0 ` `       ``pref[i] = pref[i - ``1``] + isEvenParity(i); ` `    ``} ` `} ` ` `  `// Function to print sum ` `// for each query ` `static` `void` `printSum(``int` `L, ``int` `R) ` `{ ` `    ``System.out.println(pref[R] - pref[L - ``1``]); ` `} ` ` `  `// Function to print sum of all ` `// even parity numbers between ` `// [L, R] ` `static` `void` `printSum(``int` `arr[][], ``int` `Q) ` `{ ` `     `  `    ``// Function that pre computes ` `    ``// the sum of all even parity ` `    ``// numbers ` `    ``preCompute(); ` ` `  `    ``// Iterate over all Queries ` `    ``// to print sum ` `    ``for``(``int` `i = ``0``; i < Q; i++)  ` `    ``{ ` `       ``printSum(arr[i][``0``], arr[i][``1``]); ` `    ``} ` `} ` `     `  `// Driver code  ` `public` `static` `void` `main(String[] args)  ` `{  ` `     `  `    ``// Queries ` `    ``int` `N = ``2``; ` `    ``int``[][] Q = { { ``1``, ``10` `},  ` `                  ``{ ``121``, ``211` `} }; ` ` `  `    ``// Function that print ` `    ``// the sum of all even parity ` `    ``// numbers in Range [L, R] ` `    ``printSum(Q, N); ` `}  ` `} ` ` `  `// This code is contributed by coder001 `

## C#

 `// C# program to find the sum ` `// of all Even Parity numbers ` `// in the given range ` `using` `System; ` ` `  `class` `GFG {  ` `     `  `// pref[] array to precompute ` `// the sum of all Even ` `// Parity Numbers ` `static` `int``[] pref = ``new` `int``; ` ` `  `// Function that returns true ` `// if count of set bits in ` `// x is even ` `static` `int` `isEvenParity(``int` `num) ` `{ ` `     `  `    ``// Parity will store the ` `    ``// count of set bits ` `    ``int` `parity = 0; ` `    ``int` `x = num; ` `     `  `    ``while` `(x != 0) ` `    ``{ ` `        ``if` `((x & 1) == 1) ` `            ``parity++; ` `             `  `        ``x = x >> 1; ` `    ``} ` `     `  `    ``if` `(parity % 2 == 0) ` `        ``return` `num; ` `    ``else` `        ``return` `0; ` `} ` ` `  `// Function to precompute the ` `// sum of all even parity ` `// numbers upto 100000 ` `static` `void` `preCompute() ` `{ ` `    ``for``(``int` `i = 1; i < 100001; i++) ` `    ``{ ` `         `  `       ``// isEvenParity() ` `       ``// return the number i ` `       ``// if i has even parity ` `       ``// else return 0 ` `       ``pref[i] = pref[i - 1] + isEvenParity(i); ` `    ``} ` `} ` ` `  `// Function to print sum ` `// for each query ` `static` `void` `printSum(``int` `L, ``int` `R) ` `{ ` `    ``Console.WriteLine(pref[R] - pref[L - 1]); ` `} ` ` `  `// Function to print sum of all ` `// even parity numbers between ` `// [L, R] ` `static` `void` `printSum(``int``[,] arr, ``int` `Q) ` `{ ` `     `  `    ``// Function that pre computes ` `    ``// the sum of all even parity ` `    ``// numbers ` `    ``preCompute(); ` ` `  `    ``// Iterate over all Queries ` `    ``// to print sum ` `    ``for``(``int` `i = 0; i < Q; i++)  ` `    ``{ ` `       ``printSum(arr[i, 0], arr[i, 1]); ` `    ``} ` `} ` `     `  `// Driver code  ` `public` `static` `void` `Main()  ` `{  ` `     `  `    ``// Queries ` `    ``int` `N = 2; ` `    ``int``[,] Q = { { 1, 10 },  ` `                 ``{ 121, 211 } }; ` ` `  `    ``// Function that print ` `    ``// the sum of all even parity ` `    ``// numbers in Range [L, R] ` `    ``printSum(Q, N); ` `}  ` `} ` ` `  `// This code is contributed by AbhiThakur `

Output:

```33
7493
```

Time Complexity: O(N), where N is the maximum element in the query. My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : coder001, abhaysingh290895