Find the values of X and Y in the Given Equations

Given two numbers A and B. Find the values of X and Y in the equations.

  1. A = X + Y
  2. B = X xor Y

The task is to make X as minimum as possible. If it is not possible to find any valid values for X and Y then print -1.

Examples:

Input : A = 12, B = 8
Output : X = 2, Y = 10

Input : A = 12, B = 9
Output : -1

Let’s take a look at some bit in X, which is equal to 1. If the respective bit in Y is equal to 0, then one can swap these two bits, thus reducing X and increasing Y without changing their sum and xor. We can conclude that if some bit in X is equal to 1 then the respective bit in Y is also equal to 1. Thus, Y = X + B. Taking into account that X + Y = X + X + B = A, one can obtain the following formulas for finding X and Y:

  • X = (A – B) / 2
  • Y = X + B = (A + B) / 2

One should also notice that if A < B or A and B have different parity, then the answer doesn’t exist and output is -1. If X and (A – X) not equal to X then the answer is also -1.

Below is the implementation of the above approach :

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the values of
// X and Y using the given equations
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to find the
// values of X and Y
void findValues(int a, int b)
{
    // base condition
    if ((a - b) % 2 == 1) {
        cout << "-1";
        return;
    }
  
    // required answer
    cout << (a - b) / 2 << " " << (a + b) / 2;
}
  
// Driver Code
int main()
{
    int a = 12, b = 8;
  
    findValues(a, b);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the values of
// X and Y using the given equations
import java.io.*;
  
class GFG 
{
      
// Function to find the
// values of X and Y
static void findValues(int a, int b)
{
    // base condition
    if ((a - b) % 2 == 1
    {
            System.out.println ("-1");
        return;
    }
  
    // required answer
    System.out.println (((a - b) / 2)+ " " +
                            ((a + b) / 2));
}
  
    // Driver Code
    public static void main (String[] args)
    {
        int a = 12, b = 8;
        findValues(a, b);
    }
}
  
// This code is contributed by ajit... 

chevron_right


Python3

# Python3 program to find the values of
# X and Y using the given equations

# Function to find the values of X and Y
def findValues(a, b):

# base condition
if ((a – b) % 2 == 1):
print(“-1”);
return;

# required answer
print((a – b) // 2, (a + b) // 2);

# Driver Code
a = 12; b = 8;

findValues(a, b);

# This code is contributed
# by Akanksha Rai

C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the values of
// X and Y using the given equations
using System;
  
class GFG
{
          
// Function to find the
// values of X and Y
static void findValues(int a, int b)
{
    // base condition
    if ((a - b) % 2 == 1) 
    {
            Console.Write ("-1");
        return;
    }
  
    // required answer
    Console.WriteLine(((a - b) / 2)+ " " +
                        ((a + b) / 2));
}
  
// Driver Code
static public void Main ()
{
    int a = 12, b = 8;
    findValues(a, b);
}
}
  
// This code is contributed by @Tushil.. 

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the values of
// X and Y using the given equations
  
// Function to find the values 
// of X and Y
function findValues($a, $b)
{
    // base condition
    if (($a - $b) % 2 == 1)
    {
        echo "-1";
        return;
    }
  
    // required answer
    echo ($a - $b) / 2, " "
         ($a + $b) / 2;
}
  
// Driver Code
$a = 12;
$b = 8;
findValues($a, $b);
  
// This code is contributed by jit_t
?>

chevron_right


Output:

2 10


My Personal Notes arrow_drop_up