# Find the values of X and Y in the Given Equations

Given two numbers and . 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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// CPP program to find the values of ` `// X and Y using the given equations ` ` `  `#include ` `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; ` `} `

## Java

 `// 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...  `

## 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;

print((a – b) // 2, (a + b) // 2);

# Driver Code
a = 12; b = 8;

findValues(a, b);

# This code is contributed
# by Akanksha Rai

## C#

 `// 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..  `

## PHP

 ` `

Output:

```2 10
```

My Personal Notes arrow_drop_up