Find XOR of numbers from the range [L, R]

• Difficulty Level : Basic
• Last Updated : 21 Oct, 2021

Given two integers L and R, the task is to find the XOR of elements of the range [L, R]
Examples :‘

Input: L = 4, R = 8
Output:
4 ^ 5 ^ 6 ^ 7 ^ 8 = 8
Input: L = 3, R = 7
Output:

Naive Approach: Initialize answer as zero, Traverse all numbers from L to R and perform XOR of the numbers one by one with the answer. This would take O(N) time.
Efficient Approach: By following the approach discussed here, we can find the XOR of elements from the range [1, N] in O(1) time.
Using this approach, we have to find xor of elements from the range [1, L – 1] and from the range [1, R] and then xor the respective answers again to get the xor of the elements from the range [L, R]. This is because every element from the range [1, L – 1] will get XORed twice in the result resulting in a 0 which when XORed with the elements of the range [L, R] will give the result.
Below is the implementation of the above approach:

C++

 // C++ implementation of the approach#include using namespace std; // Function to return the XOR of elements// from the range [1, n]int findXOR(int n){    int mod = n % 4;     // If n is a multiple of 4    if (mod == 0)        return n;     // If n % 4 gives remainder 1    else if (mod == 1)        return 1;     // If n % 4 gives remainder 2    else if (mod == 2)        return n + 1;     // If n % 4 gives remainder 3    else if (mod == 3)        return 0;} // Function to return the XOR of elements// from the range [l, r]int findXOR(int l, int r){    return (findXOR(l - 1) ^ findXOR(r));} // Driver codeint main(){    int l = 4, r = 8;     cout << findXOR(l, r);     return 0;}

Java

 // Java implementation of the approachclass GFG{    // Function to return the XOR of elements    // from the range [1, n]    static int findXOR(int n)    {        int mod = n % 4;         // If n is a multiple of 4        if (mod == 0)            return n;         // If n % 4 gives remainder 1        else if (mod == 1)            return 1;         // If n % 4 gives remainder 2        else if (mod == 2)            return n + 1;         // If n % 4 gives remainder 3        else if (mod == 3)            return 0;        return 0;    }     // Function to return the XOR of elements    // from the range [l, r]    static int findXOR(int l, int r)    {        return (findXOR(l - 1) ^ findXOR(r));    }     // Driver code    public static void main(String[] args)    {         int l = 4, r = 8;             System.out.println(findXOR(l, r));    }} // This code contributed by Rajput-Ji

Python3

 # Python3 implementation of the approachfrom operator import xor # Function to return the XOR of elements# from the range [1, n]def findXOR(n):    mod = n % 4;     # If n is a multiple of 4    if (mod == 0):        return n;     # If n % 4 gives remainder 1    elif (mod == 1):        return 1;     # If n % 4 gives remainder 2    elif (mod == 2):        return n + 1;     # If n % 4 gives remainder 3    elif (mod == 3):        return 0; # Function to return the XOR of elements# from the range [l, r]def findXORFun(l, r):    return (xor(findXOR(l - 1) , findXOR(r))); # Driver codel = 4; r = 8; print(findXORFun(l, r)); # This code is contributed by PrinciRaj1992

C#

 // C# implementation of the approachusing System; class GFG{    // Function to return the XOR of elements    // from the range [1, n]    static int findXOR(int n)    {        int mod = n % 4;         // If n is a multiple of 4        if (mod == 0)            return n;         // If n % 4 gives remainder 1        else if (mod == 1)            return 1;         // If n % 4 gives remainder 2        else if (mod == 2)            return n + 1;         // If n % 4 gives remainder 3        else if (mod == 3)            return 0;        return 0;    }     // Function to return the XOR of elements    // from the range [l, r]    static int findXOR(int l, int r)    {        return (findXOR(l - 1) ^ findXOR(r));    }     // Driver code    public static void Main()    {         int l = 4, r = 8;             Console.WriteLine(findXOR(l, r));    }} // This code is contributed by AnkitRai01

Javascript


Output:
8

My Personal Notes arrow_drop_up