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 = 8Input: 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++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to return the XOR of elements // from the range [l, r] int findXOR( int l, int r)
{ int ans = 0;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
} // Driver code int main()
{ int l = 4, r = 8;
cout << findXOR(l, r);
return 0;
} // this code is contributed by devendra solunke |
/*package whatever //do not write package name here */ import java.io.*;
class GFG {
// Function to return the XOR of elements
// from the range [l, r]
public static int findXOR( int l, int r)
{
int ans = 0 ;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
}
// Driver code
public static void main(String[] args)
{
int l = 4 ;
int r = 8 ;
System.out.println(findXOR(l, r));
}
} // this code is contributed by devendra solunke |
# Python3 implementation of the approach from operator import xor
# Function to return the XOR of elements # from the range [1, n] def findXOR(l, r):
ans = 0
for i in range (l,r + 1 ):
ans = xor(ans,i)
return ans
# Driver code l = 4 ; r = 8 ;
print (findXOR(l, r));
# This code is contributed by Arpit Jain |
// c# implementation of find xor between given range using System;
public class GFG {
// Function to return the XOR of elements
// from the range [l, r]
static int findXOR( int l, int r)
{
int ans = 0;
for ( int i = l; i <= r; i++) {
ans = ans ^ i;
}
return ans;
}
// Driver code
static void Main(String[] args)
{
int l = 4;
int r = 8;
Console.WriteLine(findXOR(l, r));
}
} // this code is contributed by devendra saunke |
// Javascript code to find xor of given range <script> var l = 4;
var r = 8;
var ans = 0;
var (int i = l; i <= r; i++)
{
ans = ans ^ i;
}
document.write(ans);
</script> // this code is contributed by devendra solunke |
8
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++ implementation of the approach #include <bits/stdc++.h> 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 code int main()
{ int l = 4, r = 8;
cout << findXOR(l, r);
return 0;
} |
// Java implementation of the approach 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(String[] args)
{
int l = 4 , r = 8 ;
System.out.println(findXOR(l, r));
}
} // This code contributed by Rajput-Ji |
# Python3 implementation of the approach from 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 code l = 4 ; r = 8 ;
print (findXORFun(l, r));
# This code is contributed by PrinciRaj1992 |
// C# implementation of the approach using 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 |
<script> // Javascript implementation of the approach
// Function to return the XOR of elements
// from the range [1, n]
function findxOR(n)
{
let 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]
function findXOR(l, r)
{
return (findxOR(l - 1) ^ findxOR(r));
}
let l = 4, r = 8;
document.write(findXOR(l, r));
</script> |
8
Time Complexity: O(1)
Auxiliary Space: O(1)