# Count even and odd Bitwise XORs of consecutive numbers in a range [L, R] starting from L

• Last Updated : 02 Feb, 2022

Given two integers L and R, the task is to find the count of even and odd Bitwise XOR values of consecutive numbers from the range [L, R] starting from L.

Examples:

Input: L = 2, R = 7
Output: Even = 3, Odd = 3
Explanation: Taking bitwise XOR of continuous numbers:
2
2 ^ 3 = 1
2 ^ 3 ^ 4 = 5
2 ^ 3 ^ 4 ^ 5 = 0
2 ^ 3 ^ 4 ^ 5 ^ 6 = 6
2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 = 1
Therefore, Bitwise XOR values obtained are {2, 1, 5, 0, 6, 1}.
Therefore, count of even XOR values is 3 and odd XOR values is 3.

Input: L = 1, R = 7
Output: Even = 3, Odd = 4

Naive Approach: The simplest approach is to traverse all numbers in the range [L, R] and perform Bitwise XOR of consecutive numbers starting from L. Finally, count the number of even and odd values Bitwise XOR values obtained.
Time Complexity: O(R – L)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the idea is based on the following observation that the Bitwise XOR from 1 to N can be calculated in constant time:

• Find the remainder of N when divide by 4.
• If remainder obtained is 0, then XOR will be equal to N.
• If remainder obtained is 1, then XOR will be equal to 1.
• If remainder obtained is 2, then XOR will be equal to N + 1.
• If remainder obtained is 3, then XOR obtained will be 0.

From the above observation, it can be concluded that the even XOR values are either 0 or multiples of 4. Follow the steps below to solve the problem:

• Store the number of elements in the range [L, R] in a variable, say X.
• Store the count of even XOR values by dividing X by 4 and multiplying by 2 in a variable, say Even.
• If L is odd and X % 4 is equal to 3, then increment Even by 1.
• Otherwise, if L is even and X % 4 is greater than 0, then increment Even by 1.
• Store the count of odd XOR values in a variable Odd = X – Even.
• After completing the above steps, print the value of Even and Odd as the result.

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach`   `#include ` `using` `namespace` `std;`   `// Print count of even and odd numbers` `// of XOR value from L to R` `void` `countEvenOdd(``int` `L, ``int` `R)` `{` `    ``// Store the number of elements` `    ``// between L and R` `    ``int` `range = R - L + 1;`   `    ``// Count of even XOR values` `    ``int` `even = (range / 4) * 2;`   `    ``// If L is odd and range % 4 = 3` `    ``if` `((L & 1) && (range % 4 == 3)) {`   `        ``// Increment even by 1` `        ``even++;` `    ``}`   `    ``// If L is even and range % 4 !=0` `    ``else` `if` `(!(L & 1) && (range % 4)) {`   `        ``// Increment even by 1` `        ``even++;` `    ``}`   `    ``// Print the answer` `    ``cout << ``"Even = "` `<< even` `         ``<< ``", Odd = "` `<< range - even;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `L = 2, R = 7;` `    ``countEvenOdd(L, R);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG ` `{` `  ``// Print count of even and odd numbers ` `  ``// of XOR value from L to R ` `  ``static` `void` `countEvenOdd(``int` `L, ``int` `R) ` `  ``{ `   `    ``// Store the number of elements ` `    ``// between L and R ` `    ``int` `range = R - L + ``1``; `   `    ``// Count of even XOR values ` `    ``int` `even = (range / ``4``) * ``2``; `   `    ``// If L is odd and range % 4 = 3 ` `    ``if` `((L & ``1``) != ``0` `&& (range % ``4` `== ``3``))` `    ``{ `   `      ``// Increment even by 1 ` `      ``even++; ` `    ``} `   `    ``// If L is even and range % 4 !=0 ` `    ``else` `if` `((L & ``1``) == ``0` `&& (range % ``4` `!= ``0``))` `    ``{ `   `      ``// Increment even by 1 ` `      ``even++; ` `    ``} `   `    ``// Print the answer ` `    ``System.out.print(``"Even = "` `+ even + ` `                     ``", Odd = "` `+ (range - even)); ` `  ``} `   `  ``// Driver Code` `  ``public` `static` `void` `main(String[] args) ` `  ``{` `    ``int` `L = ``2``, R = ``7``; ` `    ``countEvenOdd(L, R);` `  ``}` `}`   `// This code is contributed by sanjoy_62.`

## Python3

 `# Python program for the above approach`   `# Print count of even and odd numbers` `# of XOR value from L to R` `def` `countEvenOdd(L, R):` `  `  `    ``# Store the number of elements` `    ``# between L and R` `    ``range` `=` `R ``-` `L ``+` `1``;`   `    ``# Count of even XOR values` `    ``even ``=` `(``range` `/``/` `4``) ``*` `2``;`   `    ``# If L is odd and range % 4 = 3` `    ``if` `((L & ``1``) !``=` `0` `and` `(``range` `%` `4` `=``=` `3``)):`   `        ``# Increment even by 1` `        ``even ``+``=` `1``;`   `    ``# If L is even and range % 4 !=0` `    ``elif` `((L & ``1``) ``=``=` `0` `and` `(``range` `%` `4` `!``=` `0``)):`   `        ``# Increment even by 1` `        ``even ``+``=` `1``;`   `    ``# Print the answer` `    ``print``(``"Even = "` `, even ,\` `          ``", Odd = "` `, (``range` `-` `even));`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    ``L ``=` `2``; R ``=` `7``;` `    ``countEvenOdd(L, R);`   `# This code is contributed by shikhasingrajput`

## C#

 `// C# program for the above approach` `using` `System;` `class` `GFG` `{` `    `  `    ``// Print count of even and odd numbers ` `    ``// of XOR value from L to R ` `    ``static` `void` `countEvenOdd(``int` `L, ``int` `R) ` `    ``{ ` `      `  `        ``// Store the number of elements ` `        ``// between L and R ` `        ``int` `range = R - L + 1; ` `      `  `        ``// Count of even XOR values ` `        ``int` `even = (range / 4) * 2; ` `      `  `        ``// If L is odd and range % 4 = 3 ` `        ``if` `((L & 1) != 0 && (range % 4 == 3))` `        ``{ ` `      `  `            ``// Increment even by 1 ` `            ``even++; ` `        ``} ` `      `  `        ``// If L is even and range % 4 !=0 ` `        ``else` `if` `((L & 1) == 0 && (range % 4 != 0))` `        ``{ ` `      `  `            ``// Increment even by 1 ` `            ``even++; ` `        ``} ` `      `  `        ``// Print the answer ` `        ``Console.Write(``"Even = "` `+ even + ` `                      ``", Odd = "` `+ (range - even)); ` `    ``} `   `  ``// Driver code` `  ``static` `void` `Main()` `  ``{` `    ``int` `L = 2, R = 7; ` `    ``countEvenOdd(L, R);` `  ``}` `}`   `// This code is contributed by divyeshrabadiya07.`

## Javascript

 ``

Output:

`Even = 3, Odd = 3`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :