Given A numbers of white and B numbers of black balls. You need to have X number of white and Y number of black balls (A <= X, B <= Y) to win the game by doing some(zero or more) operations.
In one operation: At any moment if you have p white and q black balls then at that moment you can buy q white or p black balls.
Find if it’s possible to have X white and Y black balls at the end or not.
Examples:
Input: A = 1, B = 1, X = 3, Y = 8 Output: POSSIBLE Explanation: The steps are, (1, 1)>(1, 2)>(3, 2)>(3, 5)>(3, 8) Input: A = 3, Y = 2, X = 4, Y = 6 Output: NOT POSSIBLE
Approach:
We have to solve this problem using the property of gcd. Let’s see how.
 Initially, we have A white and B black ball. We have to get rest of the XA Red balls and YB Black balls.

Below is the property of gcd of two numbers that we will use,
gcd(x, y) = gcd(x + y, y) gcd(x, y) = gcd(x, y + x)
 This property is the same as the operation which is mentioned in the question. So from here, we get that if the gcd of the final state is the same as gcd of initial state then it is always possible to reach the goal, otherwise not.
Below is the implementation of the above approach:
C++
// C++ program to Find is it possible // to have X white and Y black // balls at the end. #include <bits/stdc++.h> using namespace std; // Recursive function to return // gcd of a and b int gcd( int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function returns if it's // possible to have X white // and Y black balls or not. void IsPossible( int a, int b, int x, int y) { // Finding gcd of (x, y) // and (a, b) int final = gcd(x, y); int initial = gcd(a, b); // If gcd is same, it's always // possible to reach (x, y) if (initial == final) { cout << "POSSIBLE\n" ; } else { // Here it's never possible // if gcd is not same cout << "NOT POSSIBLE\n" ; } } // Driver Code int main() { int A = 1, B = 2, X = 4, Y = 11; IsPossible(A, B, X, Y); A = 2, B = 2, X = 3, Y = 6; IsPossible(A, B, X, Y); return 0; } 
Java
// Java program to Find is it possible // to have X white and Y black // balls at the end. import java.io.*; class GFG{ // Recursive function to return // gcd of a and b static int gcd( int a, int b) { if (b == 0 ) return a; return gcd(b, a % b); } // Function returns if it's // possible to have X white // and Y black balls or not. static void IsPossible( int a, int b, int x, int y) { // Finding gcd of (x, y) // and (a, b) int g = gcd(x, y); int initial = gcd(a, b); // If gcd is same, it's always // possible to reach (x, y) if (initial == g) { System.out.print( "POSSIBLE\n" ); } else { // Here it's never possible // if gcd is not same System.out.print( "NOT POSSIBLE\n" ); } } // Driver code public static void main(String args[]) { int A = 1 , B = 2 , X = 4 , Y = 11 ; IsPossible(A, B, X, Y); A = 2 ; B = 2 ; X = 3 ; Y = 6 ; IsPossible(A, B, X, Y); } } // This code is contributed by shivanisinghss2110 
Python3
# Python3 program to find is it possible # to have X white and Y black # balls at the end. # Recursive function to return # gcd of a and b def gcd(a, b) : if (b = = 0 ) : return a; return gcd(b, a % b); # Function returns if it's # possible to have X white # and Y black balls or not. def IsPossible(a, b, x, y) : # Finding gcd of (x, y) # and (a, b) final = gcd(x, y); initial = gcd(a, b); # If gcd is same, it's always # possible to reach (x, y) if (initial = = final) : print ( "POSSIBLE" ); else : # Here it's never possible # if gcd is not same print ( "NOT POSSIBLE" ); # Driver Code if __name__ = = "__main__" : A = 1 ; B = 2 ; X = 4 ; Y = 11 ; IsPossible(A, B, X, Y); A = 2 ; B = 2 ; X = 3 ; Y = 6 ; IsPossible(A, B, X, Y); # This code is contributed by AnkitRai01 
C#
// C# program to Find is it possible // to have X white and Y black // balls at the end. using System; using System.Linq; class GFG { // Recursive function to return // gcd of a and b static int gcd( int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function returns if it's // possible to have X white // and Y black balls or not. static void IsPossible( int a, int b, int x, int y) { // Finding gcd of (x, y) // and (a, b) int g = gcd(x, y); int initial = gcd(a, b); // If gcd is same, it's always // possible to reach (x, y) if (initial == g) { Console.Write( "POSSIBLE\n" ); } else { // Here it's never possible // if gcd is not same Console.Write( "NOT POSSIBLE\n" ); } } // Driver code static public void Main() { int A = 1, B = 2; int X = 4, Y = 11; IsPossible(A, B, X, Y); A = 2; B = 2; X = 3; Y = 6; IsPossible(A, B, X, Y); } } // This code is contributed by shivanisinghss2110 
POSSIBLE NOT POSSIBLE
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a studentfriendly price and become industry ready.
Recommended Posts:
 Find ways to arrange K green balls among N balls such that exactly i moves is needed to collect all K green balls
 Ways to arrange Balls such that adjacent balls are of different types
 Game Theory (Normal form game)  Set 2 (Game with Pure Strategy)
 Game Theory (Normalform game)  Set 3 (Game with Mixed Strategy)
 Game Theory (Normalform Game)  Set 6 (Graphical Method [2 X N] Game)
 Game Theory (Normalform Game)  Set 7 (Graphical Method [M X 2] Game)
 Determine winner of the Game by arranging balls in a row
 Combinatorial Game Theory  Set 2 (Game of Nim)
 Game Theory (Normalform Game)  Set 4 (Dominance PropertyPure Strategy)
 Game Theory (Normalform Game)  Set 5 (Dominance PropertyMixed Strategy)
 Program to check if water tank overflows when n solid balls are dipped in the water tank
 Ways to choose balls such that at least one ball is chosen
 Find total no of collisions taking place between the balls in which initial direction of each ball is given
 Coin game of two corners (Greedy Approach)
 Two player game in which a player can remove all occurrences of a number
 Optimal Strategy for a Game  DP31
 Combinatorial Game Theory  Set 4 (Sprague  Grundy Theorem)
 Minimum Players required to win the game
 Predict the winner of the game on the basis of absolute difference of sum by selecting numbers
 Minimum possible final health of the last monster in a game
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.