Given two integers X and Y, the task is to check if these two integers can be made equal to 0 by using the given operation any number of times. An operation is described as follows –
- Choose an arbitrary integer Z.
- Update the values with either of the following values:
- X = X – 2*Z and Y = Y – 3*Z
- X = X – 3*Z and Y = Y – 2*Z
Examples:
Input: X = 6, Y = 9
Output: Yes
Explanation:
Operation 1: Choose Z = 3, X = 6 – 2*3 = 0 and Y = 9 – 3*3 = 0
Since X and Y can be made equal to 0 using 1 operation, the required answer is Yes.
Input: X = 33, Y = 27
Output: Yes
Explanation:
Operation 1: Choose Z = 9, X := 33 – 3*9 = 6 and Y := 27 – 2*9 = 9
Operation 2: Choose Z = 3, X := 6 – 2*3 = 0 and Y := 9 – 3*3 = 0
Since X and Y can be made equal to 0 using 2 operation, the required answer is Yes.
Approach: Let’s assume X ? Y. Then the answer is Yes if two following conditions holds:
-
(X + Y) mod 5 = 0: because after each operation the value (X + Y) mod 5 does not change.
Let’s assume some arbitrary number Z has been chosen.
Therefore, the value (X + Y) will be changed to
((X - 3Z) + (Y - 2Z))
- This is equal to
(X + Y - 5Z)
- For this value to be equal to 0, X + Y = 5Z. Therefore, on taking mod on both the sides, (X + Y) mod 5 has to be equal to 0.
- 3*X >= 2*Y so that the subtraction doesnt make the values of X and Y negative.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to check if X and Y // can be made equal to zero by // using given operation any number of times void ifPossible( int X, int Y)
{ if (X > Y)
swap(X, Y);
// Check for the two conditions
if ((X + Y) % 5 == 0 and 3 * X >= 2 * Y)
cout << "Yes" ;
else
cout << "No" ;
} // Driver code int main()
{ int X = 33, Y = 27;
ifPossible(X, Y);
return 0;
} |
// Java implementation of the approach class GFG
{ // Function to check if X and Y // can be made equal to zero by // using given operation any number of times static void ifPossible( int X, int Y)
{ if (X > Y)
swap(X, Y);
// Check for the two conditions
if ((X + Y) % 5 == 0 && 3 * X >= 2 * Y)
System.out.print( "Yes" );
else
System.out.print( "No" );
} static void swap( int x, int y)
{ int temp = x;
x = y;
y = temp;
} // Driver code public static void main(String[] args)
{ int X = 33 , Y = 27 ;
ifPossible(X, Y);
} } // This code is contributed by Rajput-Ji |
# Python3 implementation of the approach # Function to check if X and Y # can be made equal to zero by # using given operation any number of times def ifPossible(X, Y):
if (X > Y):
X, Y = Y, X
# Check for the two conditions
if ((X + Y) % 5 = = 0 and 3 * X > = 2 * Y):
print ( "Yes" )
else :
print ( "No" )
# Driver code X = 33
Y = 27
ifPossible(X, Y) # This code is contributed by mohit kumar 29 |
// C# implementation of the approach using System;
class GFG
{ // Function to check if X and Y // can be made equal to zero by // using given operation any number of times static void ifPossible( int X, int Y)
{ if (X > Y)
swap(X, Y);
// Check for the two conditions
if ((X + Y) % 5 == 0 && 3 * X >= 2 * Y)
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
} static void swap( int x, int y)
{ int temp = x;
x = y;
y = temp;
} // Driver code public static void Main()
{ int X = 33, Y = 27;
ifPossible(X, Y);
} } // This code is contributed by Yash_R |
<script> // Javascript implementation of the approach // Function to check if X and Y // can be made equal to zero by // using given operation any number of times function ifPossible(X, Y)
{ if (X > Y)
{
var temp = X;
X = Y;
Y =temp;
}
// Check for the two conditions
if ((X + Y) % 5 == 0 && 3 * X >= 2 * Y)
document.write( "Yes" );
else
document.write( "No" );
} // Driver code var X = 33, Y = 27;
ifPossible(X, Y); // This code is contributed by rutvik_56. </script> |
Yes
Time Complexity: O(1)
Auxiliary Space: O(1)