Open In App

Largest number M less than N such that XOR of M and N is even

Given a positive integer N, the task is to find the largest integer M such that 0 <= M < N and XOR(M, N) is an even number. If such a value of M cannot be obtained for given N, print -1.

Examples:



Input: N = 10 
Output:
Explanation: 
(10 XOR 9) = 3, so M = 9 is not possible because 3 is not an even number. 
(10 XOR 8) = 2, so M = 8 is possible as it is the largest possible value of M satisfying the necessary conditions.

Input: N = 5 
Output:
(5 XOR 4) = 1, so M = 4 is not possible because 1 is not an even number. 
(5 XOR 3) = 6, so M = 3 is possible as 6 is an even number and 3 is the largest possible value of M (which is less than N). 
 



Approach: 
Following observations need to be made while solving the problem: 

From the above explanation, the problem can be solved by the following steps: 

  1. If N is odd, the largest odd number which is less than N will be N – 2.
  2. If N is even, the largest even number which is less than N will be N – 2.
  3. Hence, if N = 1, print -1 as a suitable M cannot be obtained in this case. For all other cases, print N – 2 as the answer.

Below is the implementation of the above approach: 




// C++ program for the above problem.
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the maximum
// possible value of M
int getM(int n)
{
    // Edge case
    if (n == 1)
        return -1;
 
    // M = N - 2 is maximum
    // possible value
    else
        return n - 2;
}
 
// Driver Code
int main()
{
    int n = 10;
 
    int ans = getM(n);
    cout << ans;
}




// Java program for the above problem.
import java.util.*;
 
class GFG{
     
// Function to find the maximum
// possible value of M
static int getM(int n)
{
     
    // Edge case
    if (n == 1)
        return -1;
             
    // M = N - 2 is maximum
    // possible value
    else
        return n - 2;
}
     
// Driver code
public static void main(String[] args)
{
    int n = 10;
         
    System.out.print(getM(n));
}
}
 
// This code is contributed by sanjoy_62




# Python3 program for the above problem
 
# Function to find the maximum
# possible value of M
def getM(n):
     
    # Edge case
    if (n == 1):
        return -1;
         
    # M = N - 2 is maximum
    # possible value
    else:
        return n - 2;                
 
# Driver code
n = 10
 
print(getM(n))
 
# This code is contributed by sanjoy_62




// C# program for the above problem.
using System;
class GFG{
     
// Function to find the maximum
// possible value of M
static int getM(int n)
{
     
    // Edge case
    if (n == 1)
        return -1;
                 
    // M = N - 2 is maximum
    // possible value
    else
        return n - 2;
}
 
// Driver code
static void Main()
{
    int n = 10;
         
    Console.Write(getM(n));
}
}
 
// This code is contributed by divyeshrabadiya07




<script>
 
// Javascript program for the above problem.
 
// Function to find the maximum
// possible value of M
function getM(n)
{
        // Edge case
    if (n == 1)
        return -1;
         
    // M = N - 2 is maximum
    // possible value
    else
        return n - 2;
}
     
// Driver code
var n = 10;
 
document.write(getM(n));
 
// This code is contributed by Khushboogoyal499
    
</script>

Output: 
8

 

Time Complexity: O(1) 
Auxiliary Space: O(1)
 


Article Tags :