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++
#include <bits/stdc++.h>
using namespace std;
void findValues( int a, int b)
{
if ((a - b) % 2 == 1) {
cout << "-1" ;
return ;
}
cout << (a - b) / 2 << " " << (a + b) / 2;
}
int main()
{
int a = 12, b = 8;
findValues(a, b);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static void findValues( int a, int b)
{
if ((a - b) % 2 == 1 )
{
System.out.println ( "-1" );
return ;
}
System.out.println (((a - b) / 2 )+ " " +
((a + b) / 2 ));
}
public static void main (String[] args)
{
int a = 12 , b = 8 ;
findValues(a, b);
}
}
|
Python3
def findValues(a, b):
if ((a - b) % 2 = = 1 ):
print ( "-1" );
return ;
print ((a - b) / / 2 , (a + b) / / 2 );
a = 12 ; b = 8 ;
findValues(a, b);
|
C#
using System;
class GFG
{
static void findValues( int a, int b)
{
if ((a - b) % 2 == 1)
{
Console.Write ( "-1" );
return ;
}
Console.WriteLine(((a - b) / 2)+ " " +
((a + b) / 2));
}
static public void Main ()
{
int a = 12, b = 8;
findValues(a, b);
}
}
|
PHP
<?php
function findValues( $a , $b )
{
if (( $a - $b ) % 2 == 1)
{
echo "-1" ;
return ;
}
echo ( $a - $b ) / 2, " " ,
( $a + $b ) / 2;
}
$a = 12;
$b = 8;
findValues( $a , $b );
?>
|
Javascript
<script>
function findValues(a, b)
{
if ((a - b) % 2 == 1)
{
document.write( "-1" );
return ;
}
document.write( (a - b) / 2+ " " +
(a + b) / 2);
}
let a = 12;
let b = 8;
findValues(a, b);
</script>
|
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.
Last Updated :
23 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...