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.
- A = X + Y
- 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++
// 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; } |
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 ; # 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#
// 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
<?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 ?> |
Javascript
<script> // Javascript 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) { document.write( "-1" ); return ; } // required answer document.write( (a - b) / 2+ " " + (a + b) / 2); } // Driver Code let a = 12; let b = 8; findValues(a, b); // This code is contributed // by bobby </script> |
2 10
Time Complexity: O(1), since there is only basic arithmetic that takes constant time.
Auxiliary Space: O(1), since no extra space has been taken.