Minimum operations required to make two numbers equal - GeeksforGeeks

24 Nov, 2021
Given two integers A and B. the task is to find the minimum number of operations required to make A and B equal. In each operation, either of the below steps can be performed:  
Increment either A or B with its initial value.
Increment both A and B with their initial value
Examples:  
Input: A = 4, B = 10 Output: 4 Explanation: Initially A = 4, B = 10 Operation 1: Increment A only: A = A + 4 = 8 Operation 2: Increment A only: A = A + 4 = 12 Operation 3: Increment A only: A = A + 4 = 16 Operation 4: Increment A and B: A = A + 4 = 20 and B = B + 10 = 20 They are equal now.Input: A = 7, B = 23 Output: 22 Explanation: Initially A = 7, B = 23 Operation 1 – 7: Increment A and B: A = 56 and B = 161 Operation 8 – 22: Increment A: A = 161 and B = 161 They are equal now.  
 
Approach: This problem can be solved using GCD.  
If A is greater than B, then swap A and B.Now reduce B, such that gcd of A and B becomes 1.Hence the minimum operations required to reach equal value is (B – 1).
If A is greater than B, then swap A and B.
Now reduce B, such that gcd of A and B becomes 1.
Hence the minimum operations required to reach equal value is (B – 1).
For example: If A = 4, B = 10:  
Step 1: Compare 4 and 10, as we always need B as the greater value. Here already B is greater than A. So, now no swap is required.
Step 2: GCD(4, 10) = 2. So, we reduce B to B/2. Now A = 4 and B = 5. GCD(4, 5) = 1, which was the target.
Step 3: (Current value of B – 1) will be the required count. Here, Current B = 5. So (5 – 1 = 4), i.e. total 4 operations are required.
Below is the implementation of the above approach.  
C++
Java
Python3
C#
Javascript
// C++ program to find minimum// operations required to// make two numbers equal #include <bits/stdc++.h>using namespace std; // Function to return the// minimum operations requiredlong long int minOperations(    long long int A,    long long int B){     // Keeping B always greater    if (A > B)        swap(A, B);     // Reduce B such that    // gcd(A, B) becomes 1.    B = B / __gcd(A, B);     return B - 1;} // Driver codeint main(){    long long int A = 7, B = 15;     cout << minOperations(A, B)         << endl;     return 0;}
// Java program to find minimum// operations required to// make two numbers equalclass GFG{  // Function to return the// minimum operations requiredstatic int  minOperations(    int  A,    int  B){      // Keeping B always greater    if (A > B) {        A = A+B;        B = A-B;        A = A-B;    }      // Reduce B such that    // gcd(A, B) becomes 1.    B = B / __gcd(A, B);      return B - 1;}static int __gcd(int a, int b) {     return b == 0? a:__gcd(b, a % b);    } // Driver codepublic static void main(String[] args){    int  A = 7, B = 15;      System.out.print(minOperations(A, B)         +"\n");  }} // This code contributed by sapnasingh4991
# Python program to find minimum# operations required to# make two numbers equalimport math # Function to return the# minimum operations requireddef minOperations(A, B):     # Keeping B always greater    if (A > B):        swap(A, B)     # Reduce B such that    # gcd(A, B) becomes 1.    B = B // math.gcd(A, B);     return B - 1 # Driver codeA = 7B = 15 print(minOperations(A, B)) # This code is contributed by Sanjit_Prasad
// C# program to find minimum// operations required to// make two numbers equalusing System; class GFG{   // Function to return the// minimum operations requiredstatic int  minOperations(    int  A,    int  B){       // Keeping B always greater    if (A > B) {        A = A+B;        B = A-B;        A = A-B;    }       // Reduce B such that    // gcd(A, B) becomes 1.    B = B / __gcd(A, B);       return B - 1;}static int __gcd(int a, int b) {     return b == 0? a:__gcd(b, a % b);    }  // Driver codepublic static void Main(String[] args){    int  A = 7, B = 15;       Console.Write(minOperations(A, B)         +"\n");}} // This code is contributed by sapnasingh4991
<script>// javascript program to find minimum// operations required to// make two numbers equal   // Function to return the    // minimum operations required    function minOperations(A, B){         // Keeping B always greater        if (A > B) {            A = A + B;            B = A - B;            A = A - B;        }         // Reduce B such that        // gcd(A, B) becomes 1.        B = B / __gcd(A, B);         return B - 1;    }     function __gcd(a , b) {        return b == 0 ? a : __gcd(b, a % b);    }     // Driver code        var A = 7, B = 15;        document.write(minOperations(A, B) + "\n"); // This code is contributed by Rajput-Ji</script>
14
 
Time Complexity: O(log(max(A, B))
Auxiliary Space: O(log(max(A, B)) 
Sanjit_Prasad
sapnasingh4991
Rajput-Ji
subham348
GCD-LCM
Numbers
Mathematical
Mathematical
Numbers
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Print all possible combinations of r elements in a given array of size n
Program for Decimal to Binary Conversion
The Knight's tour problem | Backtracking-1
Operators in C / C++
Program for factorial of a number
Find minimum number of coins that make a given value
Program to find sum of elements in a given array