# Bitwise XOR of all odd numbers from a given range

• Last Updated : 10 Nov, 2021

Given an integer N, the task is to find the Bitwise XOR of all odd numbers in the range [1, N].

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: 11
Output: 2
Explanation: Bitwise XOR of all odd numbers up to 11 = 1 ^ 3 ^ 5 ^ 7 ^ 9 ^ 11 = 2.

Input: 10
Output: 9
Explanation: Bitwise XOR of all odd numbers up to 10 = 1 ^ 3 ^ 5 ^ 7 ^ 9 = 9.

Naive Approach: The simplest approach to solve the problem is to iterate over the range [1, N] and for every value, check if it is odd or not. Calculate Bitwise XOR of every odd element found and print it as the required result.
Time Complexity: O(N)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the idea is to use the following formula to calculate Bitwise XOR of all odd numbers less than or equal to N:

Let f(N) = 2 ^ 4 ^ 6 ^ … ^ (N − 2) ^ n and g(n) = 1 ^ 2 ^ 3 ^ … ^ (N − 2) / 2 ^ (N / 2)
=> f(N) = 2 * g(N)

Now, let k(N) = 1 ^ 2 ^ 3 ^ … ^ (N − 2) ^ N

XOR of all odd numbers less than or equal to N = k(N) ^ f(N) [Since all even numbers cancel their own bits leaving only odd numbers].
Substituting the value of f(N) = 2 * g(N), XOR of all odd numbers up to N = k(N) ^ (2 * g(N))

Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to calculate Bitwise``// XOR of odd numbers in the range [1, N]``int` `findXOR(``int` `n)``{``    ``// N & 3 is equivalent to n % 4``    ``switch` `(n & 3) {` `    ``// If n is multiple of 4``    ``case` `0:``        ``return` `n;` `    ``// If n % 4 gives remainder 1``    ``case` `1:``        ``return` `1;` `    ``// If n % 4 gives remainder 2``    ``case` `2:``        ``return` `n + 1;` `    ``// If n % 4 gives remainder 3``    ``case` `3:``        ``return` `0;``    ``}``}` `// Function to find the XOR of odd``// numbers less than or equal to N``void` `findOddXOR(``int` `n)``{` `    ``// If number is even``    ``if` `(n % 2 == 0)` `        ``// Print the answer``        ``cout << ((findXOR(n))``                 ``^ (2 * findXOR(n / 2)));` `    ``// If number is odd``    ``else` `        ``// Print the answer``        ``cout << ((findXOR(n))``                 ``^ (2 * findXOR((n - 1) / 2)));``}` `// Driver Code``int` `main()``{``    ``int` `N = 11;` `    ``// Function Call``    ``findOddXOR(N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;``class` `GFG``{` `  ``// Function to calculate Bitwise``  ``// XOR of odd numbers in the range [1, N]``  ``static` `int` `findXOR(``int` `n)``  ``{` `    ``// N & 3 is equivalent to n % 4``    ``switch` `(n & ``3``)``    ``{` `        ``// If n is multiple of 4``      ``case` `0``:``        ``return` `n;` `        ``// If n % 4 gives remainder 1``      ``case` `1``:``        ``return` `1``;` `        ``// If n % 4 gives remainder 2``      ``case` `2``:``        ``return` `n + ``1``;``    ``}``    ``// If n % 4 gives remainder 3``    ``return` `0``;` `  ``}` `  ``// Function to find the XOR of odd``  ``// numbers less than or equal to N``  ``static` `void` `findOddXOR(``int` `n)``  ``{` `    ``// If number is even``    ``if` `(n % ``2` `== ``0``)` `      ``// Print the answer``      ``System.out.print(((findXOR(n))``                        ``^ (``2` `* findXOR(n / ``2``))));` `    ``// If number is odd``    ``else` `      ``// Print the answer``      ``System.out.print(((findXOR(n))``                        ``^ (``2` `* findXOR((n - ``1``) / ``2``))));``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main(String[] args)``  ``{``    ``int` `N = ``11``;` `    ``// Function Call``    ``findOddXOR(N);``  ``}``}` `// This code is contributed by shikhasingrajput`

## Python3

 `# Python program for the above approach` `# Function to calculate Bitwise``# XOR of odd numbers in the range [1, N]``def` `findXOR(n):``  ` `    ``# N & 3 is equivalent to n % 4``    ``if` `(n ``%` `4` `=``=` `0``):``      ` `        ``# If n is multiple of 4``        ``return` `n;``    ``elif` `(n ``%` `4` `=``=` `1``):``      ` `        ``# If n % 4 gives remainder 1``        ``return` `1``;` `    ``# If n % 4 gives remainder 2``    ``elif` `(n ``%` `4` `=``=` `2``):``        ``return` `n ``+` `1``;` `    ``# If n % 4 gives remainder 3``    ``elif` `(n ``%` `4` `=``=` `3``):``        ``return` `0``;` `# Function to find the XOR of odd``# numbers less than or equal to N``def` `findOddXOR(n):``  ` `    ``# If number is even``    ``if` `(n ``%` `2` `=``=` `0``):` `        ``# Print the answer``        ``print``(((findXOR(n)) ^ (``2` `*` `findXOR(n ``/``/` `2``))));` `    ``# If number is odd``    ``else``:` `        ``# Print the answer``        ``print``(((findXOR(n)) ^ (``2` `*` `findXOR((n ``-` `1``) ``/``/` `2``))));` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``N ``=` `11``;` `    ``# Function Call``    ``findOddXOR(N);` `# This code is contributed by 29AjayKumar`

## C#

 `// C# program for the above approach``using` `System;``public` `class` `GFG``{` `  ``// Function to calculate Bitwise``  ``// XOR of odd numbers in the range [1, N]``  ``static` `int` `findXOR(``int` `n)``  ``{` `    ``// N & 3 is equivalent to n % 4``    ``switch` `(n & 3)``    ``{` `        ``// If n is multiple of 4``      ``case` `0:``        ``return` `n;` `        ``// If n % 4 gives remainder 1``      ``case` `1:``        ``return` `1;` `        ``// If n % 4 gives remainder 2``      ``case` `2:``        ``return` `n + 1;``    ``}``    ``// If n % 4 gives remainder 3``    ``return` `0;` `  ``}` `  ``// Function to find the XOR of odd``  ``// numbers less than or equal to N``  ``static` `void` `findOddXOR(``int` `n)``  ``{` `    ``// If number is even``    ``if` `(n % 2 == 0)` `      ``// Print the answer``      ``Console.Write(((findXOR(n))``                     ``^ (2 * findXOR(n / 2))));` `    ``// If number is odd``    ``else` `      ``// Print the answer``      ``Console.Write(((findXOR(n))``                     ``^ (2 * findXOR((n - 1) / 2))));``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main(String[] args)``  ``{``    ``int` `N = 11;` `    ``// Function Call``    ``findOddXOR(N);``  ``}``}` `// This code is contributed by shikhasingrajput`

## Javascript

 ``
Output:
`2`

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

My Personal Notes arrow_drop_up