Check if it is possible to make x and y zero at same time with given operation
Given two numbers X and Y. The task is to check whether X and Y can be reduced to zero at the same time by performing the following operation any number of times:
- Choose any natural number (say z) and reduce X and Y as one of the following at each operation:
- X = X – z and Y = Y – 2*z
- X = X – 2*z and Y = Y – z
Example:
Input: X = 6, Y = 9
Output: YES
Explanation:
We can perform operation in following way:
if z = 1, then
X = X – 2*z = 6 – 2*(1)
Y = Y – z = 9 – 1
=> X = 4 & Y = 8
Now again if z = 4, then
X = X – z = 4 – 4
Y = Y – 2*z = 8 – 2*(4)
=> X = 0 & Y = 0
Therefore, X & Y become zero in 2 steps assuming z as 1 and 4 respectively.
Input: X = 1, Y = 1
Output: NO
Explanation:
We don’t have any possible value for z such that X & Y can become zero simultaneously.
Approach:
Below are the observation for the given problem statement:
- Since X and Y are updated to (X – z and Y – 2*z) or (X – 2*z and Y – z), therefore after n number of operations (X + Y) is updated to (X + Y – 3*n*z). Hence X and Y can be reduced to zero at simultaneously if (X+Y)%3 equals 0.
- At each step one of the X or Y is reduced by 2*z. To reduced X and Y simultaneously zero it must satisfy this condition: max(X, Y)? 2*min(X, Y).
For Example:
Let X = 6 and Y = 15
Since (X+Y)%3 = (21%3) = 0
As our first condition is satisfied,
But by taking z = 6
X = X – z = 6 – 6 = 0
Y = Y – 2*z = 15 – 12 = 3
Since Y is not less than or equals to 2*X, therefore X and Y cannot be reduced to zero at same time.
If the above two conditions satisfy the values of X and Y, then X and Y can be reduced to 0 simultaneously.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void canBeReduced( int x, int y)
{
int maxi = max(x, y);
int mini = min(x, y);
if (((x + y) % 3) == 0 && maxi <= 2*mini)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
int main()
{
int x = 6, y = 9;
canBeReduced(x, y);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void canBeReduced( int x, int y)
{
int maxi = Math.max(x, y);
int mini = Math.min(x, y);
if (((x + y) % 3 ) == 0 && maxi <= 2 *mini)
System.out.print( "YES" + "\n" );
else
System.out.print( "NO" + "\n" );
}
public static void main(String[] args)
{
int x = 6 , y = 9 ;
canBeReduced(x, y);
}
}
|
C#
using System;
class GFG
{
static void canBeReduced( int x, int y)
{
int maxi = Math.Max(x, y);
int mini = Math.Min(x, y);
if (((x + y) % 3) == 0 && maxi <= 2*mini)
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
static void Main()
{
int x = 6, y = 9;
canBeReduced(x, y);
}
}
|
Python3
def canBeReduced(x,y):
maxi = max (x, y)
mini = min (x, y)
if (((x + y) % 3 ) = = 0 and maxi < = 2 * mini):
print ( "YES" )
else :
print ( "NO" )
if __name__ = = '__main__' :
x = 6
y = 9
canBeReduced(x, y)
|
Javascript
<script>
function canBeReduced(x , y)
{
var maxi = Math.max(x, y);
var mini = Math.min(x, y);
if (((x + y) % 3) == 0 && maxi <= 2*mini)
document.write( "YES" + "\n" );
else
document.write( "NO" + "\n" );
}
var x = 6, y = 9;
canBeReduced(x, y);
</script>
|
Time Complexity: O(1)
Last Updated :
04 Sep, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...