Find XOR of numbers from the range [L, R]
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: 8
4 ^ 5 ^ 6 ^ 7 ^ 8 = 8
Input: L = 3, R = 7
Output: 3
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.
C++
#include <bits/stdc++.h>
using namespace std;
int findXOR( int l, int r)
{
int ans = 0;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
}
int main()
{
int l = 4, r = 8;
cout << findXOR(l, r);
return 0;
}
|
Java
import java.io.*;
class GFG {
public static int findXOR( int l, int r)
{
int ans = 0 ;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
}
public static void main(String[] args)
{
int l = 4 ;
int r = 8 ;
System.out.println(findXOR(l, r));
}
}
|
Python3
from operator import xor
def findXOR(l, r):
ans = 0
for i in range (l,r + 1 ):
ans = xor(ans,i)
return ans
l = 4 ; r = 8 ;
print (findXOR(l, r));
|
C#
using System;
public class GFG {
static int findXOR( int l, int r)
{
int ans = 0;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
}
static void Main(String[] args)
{
int l = 4;
int r = 8;
Console.WriteLine(findXOR(l, r));
}
}
|
Javascript
<script>
var l = 4;
var r = 8;
var ans = 0;
var (int i = l; i <= r; i++)
{
ans = ans ^ i;
}
document.write(ans);
</script>
|
Time complexity: O(N)
Auxiliary Space: O(1)
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++
#include <bits/stdc++.h>
using namespace std;
int findXOR( int n)
{
int mod = n % 4;
if (mod == 0)
return n;
else if (mod == 1)
return 1;
else if (mod == 2)
return n + 1;
else if (mod == 3)
return 0;
}
int findXOR( int l, int r)
{
return (findXOR(l - 1) ^ findXOR(r));
}
int main()
{
int l = 4, r = 8;
cout << findXOR(l, r);
return 0;
}
|
Java
class GFG
{
static int findXOR( int n)
{
int mod = n % 4 ;
if (mod == 0 )
return n;
else if (mod == 1 )
return 1 ;
else if (mod == 2 )
return n + 1 ;
else if (mod == 3 )
return 0 ;
return 0 ;
}
static int findXOR( int l, int r)
{
return (findXOR(l - 1 ) ^ findXOR(r));
}
public static void main(String[] args)
{
int l = 4 , r = 8 ;
System.out.println(findXOR(l, r));
}
}
|
Python3
from operator import xor
def findXOR(n):
mod = n % 4 ;
if (mod = = 0 ):
return n;
elif (mod = = 1 ):
return 1 ;
elif (mod = = 2 ):
return n + 1 ;
elif (mod = = 3 ):
return 0 ;
def findXORFun(l, r):
return (xor(findXOR(l - 1 ) , findXOR(r)));
l = 4 ; r = 8 ;
print (findXORFun(l, r));
|
C#
using System;
class GFG
{
static int findXOR( int n)
{
int mod = n % 4;
if (mod == 0)
return n;
else if (mod == 1)
return 1;
else if (mod == 2)
return n + 1;
else if (mod == 3)
return 0;
return 0;
}
static int findXOR( int l, int r)
{
return (findXOR(l - 1) ^ findXOR(r));
}
public static void Main()
{
int l = 4, r = 8;
Console.WriteLine(findXOR(l, r));
}
}
|
Javascript
<script>
function findxOR(n)
{
let mod = n % 4;
if (mod == 0)
return n;
else if (mod == 1)
return 1;
else if (mod == 2)
return n + 1;
else if (mod == 3)
return 0;
}
function findXOR(l, r)
{
return (findxOR(l - 1) ^ findxOR(r));
}
let l = 4, r = 8;
document.write(findXOR(l, r));
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Last Updated :
30 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...