Print all distinct even and odd prefix Bitwise XORs of first N natural numbers
Last Updated :
17 May, 2021
Given a positive integer N, the task is to print all the distinct even and odd values of prefix Bitwise XORs of first N natural numbers.
Examples:
Input: N = 6
Output:
Even: 0 4
Odd: 1 3 7
Explanation:
The prefix Bitwise XOR of the first 6 natural number si {1, 3, 0, 4, 1, 7}.
Even prefix Bitwise XORs are 0, 4.
Odd prefix Bitwise XORs are 1, 3, 7.
Input: N = 9
Output:
Even: 0 4 8
Odd: 1 3 7
Approach: The given problem can be solved based on the below observations:
- If the value of N modulo 4 is 0, then the value of Bitwise XOR of the first N natural numbers is N.
- If the value of N modulo 4 is 1, then the value of Bitwise XOR of the first N natural numbers is 1.
- If the value of N modulo 4 is 2, then the value of Bitwise XOR of the first N natural numbers is (N + 1).
- If the value of N modulo 4 is 3, then the value of Bitwise XOR of the first N natural numbers is 0.
Therefore, from the above principle, it can be said that Bitwise XOR as even numbers will always come as 0 or multiples of 4, and Bitwise XOR as odd numbers will always come as 1 or 1 less than multiples of 4.
Below is the implementation of the above approach.
C++
#include <bits/stdc++.h>
using namespace std;
void evenOddBitwiseXOR( int N)
{
cout << "Even: " << 0 << " " ;
for ( int i = 4; i <= N; i = i + 4) {
cout << i << " " ;
}
cout << "\n" ;
cout << "Odd: " << 1 << " " ;
for ( int i = 4; i <= N; i = i + 4) {
cout << i - 1 << " " ;
}
if (N % 4 == 2)
cout << N + 1;
else if (N % 4 == 3)
cout << N;
}
int main()
{
int N = 6;
evenOddBitwiseXOR(N);
return 0;
}
|
Java
class GFG{
static void evenOddBitwiseXOR( int N)
{
System.out.print( "Even: " + 0 + " " );
for ( int i = 4 ; i <= N; i = i + 4 )
{
System.out.print(i + " " );
}
System.out.print( "\n" );
System.out.print( "Odd: " + 1 + " " );
for ( int i = 4 ; i <= N; i = i + 4 )
{
System.out.print(i - 1 + " " );
}
if (N % 4 == 2 )
System.out.print(N + 1 );
else if (N % 4 == 3 )
System.out.print(N);
}
public static void main(String[] args)
{
int N = 6 ;
evenOddBitwiseXOR(N);
}
}
|
Python3
def evenOddBitwiseXOR(N):
print ( "Even: " , 0 , end = " " )
for i in range ( 4 , N + 1 , 4 ):
print (i, end = " " )
print ()
print ( "Odd: " , 1 , end = " " )
for i in range ( 4 , N + 1 , 4 ):
print (i - 1 , end = " " )
if (N % 4 = = 2 ):
print (N + 1 )
elif (N % 4 = = 3 ):
print (N)
N = 6
evenOddBitwiseXOR(N)
|
C#
using System;
class GFG{
static void evenOddBitwiseXOR( int N)
{
Console.Write( "Even: " + 0 + " " );
for ( int i = 4; i <= N; i = i + 4)
{
Console.Write(i + " " );
}
Console.Write( "\n" );
Console.Write( "Odd: " + 1 + " " );
for ( int i = 4; i <= N; i = i + 4)
{
Console.Write(i - 1 + " " );
}
if (N % 4 == 2)
Console.Write(N + 1);
else if (N % 4 == 3)
Console.Write(N);
}
public static void Main()
{
int N = 6;
evenOddBitwiseXOR(N);
}
}
|
Javascript
<script>
function evenOddBitwiseXOR(N)
{
document.write( "Even: " + 0 + " " );
for (let i = 4; i <= N; i = i + 4)
{
document.write(i + " " );
}
document.write( "<br/>" );
document.write( "Odd: " + 1 + " " );
for (let i = 4; i <= N; i = i + 4)
{
document.write(i - 1 + " " );
}
if (N % 4 == 2)
document.write(N + 1);
else if (N % 4 == 3)
document.write(N);
}
let N = 6;
evenOddBitwiseXOR(N);
</script>
|
Output:
Even: 0 4
Odd: 1 3 7
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...