Check whether XOR of all numbers in a given range is even or odd

Given a range [ L, R ], the task is to find if value of XOR of all natural numbers in range L to R ( both inclusive ) is even or odd. Print ‘Even’ if XOR of all numbers in the range is even, otherwise print odd.

Examples:

Input: L = 1, R= 10 
Output: Odd

Input: L= 5, R=15
Output: Even

A Simple Solution is to calculate XOR of all numbers in range [L, R] and then check if resultant XOR value is even or odd.
Time Complexity of this approach will be O(n).

An Efficient Solution is based on the below fact:

odd ^ odd = even
odd ^ even = odd
even ^ odd = odd
even ^ even = even

XOR of all even numbers will be even ( irrespective of size of range ) and if count of odd numbers is odd then the final XOR will be odd and if even then final XOR will be even.

Now, it can be concluded that,

  • If the count of Odd Numbers is even,
    XOR of all odd numbers = Even
    XOR of all even numbers = Even
    Final XOR = Even ^ Even = Even

  • If the count of Odd Numbers is Odd,
    XOR of all odd numbers = Odd
    XOR of all even numbers = Even
    Final XOR = Odd ^ Even = Odd

So, all we have to do is to count odd numbers in range L to R.

Approach :

  • Count the odd numbers in the range [ L, R ].
  • Check if count of odd numbers is even or odd.
  • Print ‘Even’ if count is even otherwise print ‘Odd’ .

Below is the implementation of above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if XOR of
// all numbers in range [L, R]
// is Even or odd
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to check if XOR of all numbers
// in range [L, R] is Even or Odd
  
string isEvenOrOdd(int L, int R)
{
    // Count odd Numbers in range [L, R]
    int oddCount = (R - L) / 2;
  
    if (R % 2 == 1 || L % 2 == 1)
        oddCount++;
  
    // Check if count of odd Numbers
    // is even or odd
  
    if (oddCount % 2 == 0)
        return "Even";
    else
        return "Odd";
}
  
// Driver Code
int main()
{
  
    int L = 5, R = 15;
  
    cout << isEvenOrOdd(L, R);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if XOR of
// all numbers in range [L, R]
// is Even or odd
  
class GFG {
  
    // Function to check if XOR of all numbers
    // in range [L, R] is Even or Odd
  
    static String isEvenOrOdd(int L, int R)
    {
        // Count odd Numbers in range [L, R]
        int oddCount = (R - L) / 2;
  
        if (R % 2 == 1 || L % 2 == 1)
            oddCount++;
  
        // Check if count of odd Numbers
        // is even or odd
  
        if (oddCount % 2 == 0)
            return "Even";
        else
            return "Odd";
    }
  
    // Driver Code
    public static void main(String[] args)
    {
  
        int L = 5, R = 15;
  
        System.out.println(isEvenOrOdd(L, R));
    }
}

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if XOR of
// all numbers in range [L, R]
// is Even or odd
  
using System;
class GFG {
  
    // Function to check if XOR of all numbers
    // in range [L, R] is Even or Odd
  
    static string isEvenOrOdd(int L, int R)
    {
        // Count odd Numbers in range [L, R]
        int oddCount = (R - L) / 2;
  
        if (R % 2 == 1 || L % 2 == 1)
            oddCount++;
  
        // Check if count of odd Numbers
        // is even or odd
  
        if (oddCount % 2 == 0)
            return "Even";
        else
            return "Odd";
    }
  
    // Driver Code
    public static void Main()
    {
  
        int L = 5, R = 15;
  
        Console.WriteLine(isEvenOrOdd(L, R));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if XOR of
# all numbers in range [L, R] 
# is Even or odd
  
  
# Function to check if XOR of all numbers
# in range [L, R] is Even or Odd
  
def isEvenOrOdd( L, R ):
  
    # Count odd Numbers in range [L, R]
    oddCount = (R - L )/2
      
    if( R % 2 == 1 or L % 2 == 1):
        oddCount = oddCount + 1
      
      
    # Check if count of odd Numbers
    # is even or odd
      
    if(oddCount % 2 == 0 ):
        return "Even"
    else :
        return "Odd"
          
  
      
# Driver Code
  
L = 5
R = 15
  
print(isEvenOrOdd(L, R));

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to check if XOR of all 
// numbers in range [L, R] is Even or odd 
  
// Function to check if XOR of all numbers 
// in range [L, R] is Even or Odd 
function isEvenOrOdd($L, $R
    // Count odd Numbers in range [L, R] 
    $oddCount = floor(($R - $L) / 2); 
  
    if ($R % 2 == 1 || $L % 2 == 1) 
        $oddCount++; 
  
    // Check if count of odd Numbers 
    // is even or odd 
    if ($oddCount % 2 == 0) 
        return "Even"
    else
        return "Odd"
  
// Driver Code 
$L = 5;
$R = 15; 
  
echo isEvenOrOdd($L, $R); 
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

Even


My Personal Notes arrow_drop_up

self motivated and passionate programmer

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : AnkitRai01