Skip to content
Related Articles

Related Articles

Improve Article

Minimum steps to convert X to Y by repeated division and multiplication

  • Last Updated : 24 Mar, 2021
Geek Week

Given two integer X and Y, the task is to find the minimum number of steps to convert integer X to Y using any of the operation in each step: 

  • Divide the number by any natural number
  • Multiply the number with any natural number

Examples: 

Input: X = 8, Y = 12 
Output:
Explanation: 
First divide 8 by 2: 8/2 = 4 
Then multiply by 3: 4*3 = 12

Input: X = 4, Y = 8 
Output:
Explanation: 
To convert 4 to 8 multiply 4 by 2: 4 * 2 = 8 

Approach: To solve the problem mentioned above: 



  • Make sure X contains the smaller value among X and Y. Now, if X is greater than Y then we know that it is always easier to change a smaller number to a larger number. Hence, we just swap the values of X and Y and then follow the steps mentioned below.
  • If both the integers are same then the answer will be zero as no conversion takes place.
    For example,
If X = 4, Y = 4

Here 4 = 4
Therefore, answer = 0
(as they both are already same)
  • However, if X is less than Y then: 
    • we have to check that Y % X gives 0 or not.
    • If yes, then Y can be represented as X * (Y / X) and we get the desired output in single-step.
      For example,
If X = 4, Y = 12

Here 12 % 4 = 0
Therefore, answer = 1
(4 * 3 = 12)
  • Otherwise, the answer will be 2 as it takes two steps, one for division (X = X/X) and other for multiplication (X = X * Y).
    For example,
If X = 8, Y = 13

Here 13 % 8 != 0
Therefore, 
1. X = X/X = 8/8 = 1
2. X = X*Y = 1*13 = 13

Hence, answer = 2

Below is the implementation of the above approach:

C++




// C++ implementation to find minimum
// steps to convert X to Y by repeated
// division and multiplication
 
#include <bits/stdc++.h>
using namespace std;
 
int solve(int X, int Y)
{
    // Check if X is greater than Y
    // then swap the elements
    if (X > Y) {
        int temp = X;
        X = Y;
        Y = temp;
    }
 
    // Check if X equals Y
    if (X == Y)
        cout << 0 << endl;
 
    else if (Y % X == 0)
        cout << 1 << endl;
    else
        cout << 2 << endl;
}
 
// Driver code
int main()
{
    int X = 8, Y = 13;
    solve(X, Y);
 
    return 0;
}

Java




// Java implementation to find minimum
// steps to convert X to Y by repeated
// division and multiplication
class GFG{
 
static int solve(int X, int Y)
{
    // Check if X is greater than Y
    // then swap the elements
    if (X > Y)
    {
        int temp = X;
        X = Y;
        Y = temp;
    }
 
    // Check if X equals Y
    if (X == Y)
        System.out.println(0 );
 
    else if (Y % X == 0)
        System.out.println( 1 );
    else
        System.out.println(2 );
        return 0;
}
 
// Driver code
public static void main(String args[])
{
    int X = 8, Y = 13;
    solve(X, Y);
}
}
 
// This code is contributed by shivanisinghss2110

Python3




# Python3 implementation to find minimum
# steps to convert X to Y by repeated
# division and multiplication
def solve(X, Y):
     
    # Check if X is greater than Y
    # then swap the elements
    if (X > Y):
        temp = X
        X = Y
        Y = temp
   
    # Check if X equals Y
    if (X == Y):
        print(0)
   
    elif (Y % X == 0):
        print(1)
    else:
        print(2)
  
# Driver code
X = 8
Y = 13
 
solve(X, Y)
 
# This code is contributed by code_hunt

C#




// C# implementation to find minimum
// steps to convert X to Y by repeated
// division and multiplication
using System;
 
class GFG{
 
static int solve(int X, int Y)
{
     
    // Check if X is greater than Y
    // then swap the elements
    if (X > Y)
    {
        int temp = X;
        X = Y;
        Y = temp;
    }
 
    // Check if X equals Y
    if (X == Y)
        Console.WriteLine(0);
 
    else if (Y % X == 0)
        Console.WriteLine(1);
    else
        Console.WriteLine(2);
    return 0;
}
 
// Driver code
public static void Main(String[] args)
{
    int X = 8, Y = 13;
    solve(X, Y);
}
}
 
// This code is contributed by amal kumar choubey

Javascript




<script>
 
    // Javascript implementation to find minimum
    // steps to convert X to Y by repeated
    // division and multiplication
     
    function solve(X, Y)
    {
        // Check if X is greater than Y
        // then swap the elements
        if (X > Y) {
            let temp = X;
            X = Y;
            Y = temp;
        }
 
        // Check if X equals Y
        if (X == Y)
            document.write(0);
 
        else if (Y % X == 0)
            document.write(1);
        else
            document.write(2);
    }
     
    let X = 8, Y = 13;
    solve(X, Y);
 
 
</script>
Output: 
2

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :