# Find the minimum number of steps to reach M from N

Given two integers **N** and **M**. The task is to find the minimum number of steps to reach M from N by performing given operations.

- Multiply a number x by 2. So, x becomes 2*x.
- Subtract one from the number x. So, x becomes x-1.

**Examples:**

Input :N = 4, M = 6Output :2Explanation :Perform operation number 2 on N. So, N becomes 3 and then perform operation number 1. Then, N becomes 6. So, the minimum number of steps is 2.Input :N = 10, M = 1Output :9Explanation :Perform operation number two 9 times on N. Then N becomes 1.

**Approach **:

The idea is to reverse the problem as follows: We should get the number N starting from M using the operations:

- Divide the number by 2 if it is even.
- Add 1 to the number.

Now, the minimum number of operations would be:

- If N > M, return the difference between them, that is, number of steps will be adding 1 to M until it becomes equal to N.
- Else if N < M.
- Keep dividing M by 2 until it becomes less than N. If M is odd, add 1 to it first and then divide by 2. Once M is less than N, add the difference between them to the count along with the count of above operations.

Below is the implementation of the above approach:

## C++

`// CPP progarm to find minimum number ` `// of steps to reach M from N ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find a minimum number ` `// of steps to reach M from N ` `int` `Minsteps(` `int` `n, ` `int` `m) ` `{ ` ` ` `int` `ans = 0; ` ` ` ` ` `// Continue till m is greater than n ` ` ` `while` `(m > n) ` ` ` `{ ` ` ` `// If m is odd ` ` ` `if` `(m&1) ` ` ` `{ ` ` ` `// add one ` ` ` `m++; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// divide m by 2 ` ` ` `m /= 2; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans + n - m; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `n = 4, m = 6; ` ` ` ` ` `cout << Minsteps(n, m); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java progarm to find minimum number ` `// of steps to reach M from N ` `class` `CFG ` `{ ` ` ` `// Function to find a minimum number ` `// of steps to reach M from N ` `static` `int` `Minsteps(` `int` `n, ` `int` `m) ` `{ ` ` ` `int` `ans = ` `0` `; ` ` ` ` ` `// Continue till m is greater than n ` ` ` `while` `(m > n) ` ` ` `{ ` ` ` `// If m is odd ` ` ` `if` `(m % ` `2` `!= ` `0` `) ` ` ` `{ ` ` ` `// add one ` ` ` `m++; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// divide m by 2 ` ` ` `m /= ` `2` `; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans + n - m; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `n = ` `4` `, m = ` `6` `; ` ` ` ` ` `System.out.println(Minsteps(n, m)); ` `} ` `} ` ` ` `// This code is contributed by Code_Mech ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 progarm to find minimum number ` `# of steps to reach M from N ` ` ` `# Function to find a minimum number ` `# of steps to reach M from N ` `def` `Minsteps(n, m): ` ` ` ` ` `ans ` `=` `0` ` ` ` ` `# Continue till m is greater than n ` ` ` `while` `(m > n): ` ` ` ` ` `# If m is odd ` ` ` `if` `(m & ` `1` `): ` ` ` ` ` `# add one ` ` ` `m ` `+` `=` `1` ` ` `ans ` `+` `=` `1` ` ` ` ` `# divide m by 2 ` ` ` `m ` `/` `/` `=` `2` ` ` `ans ` `+` `=` `1` ` ` ` ` `# Return the required answer ` ` ` `return` `ans ` `+` `n ` `-` `m ` ` ` `# Driver code ` `n ` `=` `4` `m ` `=` `6` ` ` `print` `(Minsteps(n, m)) ` ` ` `# This code is contributed by mohit kumar ` |

*chevron_right*

*filter_none*

## C#

`// C# progarm to find minimum number ` `// of steps to reach M from N ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find a minimum number ` `// of steps to reach M from N ` `static` `int` `Minsteps(` `int` `n, ` `int` `m) ` `{ ` ` ` `int` `ans = 0; ` ` ` ` ` `// Continue till m is greater than n ` ` ` `while` `(m > n) ` ` ` `{ ` ` ` `// If m is odd ` ` ` `if` `(m % 2 != 0) ` ` ` `{ ` ` ` `// add one ` ` ` `m++; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// divide m by 2 ` ` ` `m /= 2; ` ` ` `ans++; ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans + n - m; ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main() ` `{ ` ` ` `int` `n = 4, m = 6; ` ` ` ` ` `Console.WriteLine(Minsteps(n, m)); ` `} ` `} ` ` ` `// This code is contributed ` `// by Akanksha Rai ` |

*chevron_right*

*filter_none*

## PHP

$n)

{

// If m is odd

if($m % 2 != 0)

{

// add one

$m++;

$ans++;

}

// divide m by 2

$m /= 2;

$ans++;

}

// Return the required answer

return $ans + $n – $m;

}

// Driver code

$n = 4; $m = 6;

echo(Minsteps($n, $m));

// This code is contributed by Code_Mech

?>

**Output:**

2

## Recommended Posts:

- Number of steps required to reach point (x,y) from (0,0) using zig-zag way
- Minimize the number of steps required to reach the end of the array | Set 2
- Minimum number of jumps to reach end
- Find minimum moves to reach target on an infinite line
- Find the minimum of maximum length of a jump required to reach the last island in exactly k jumps
- Minimum number of moves required to reach the destination by the king in a chess board
- Find the number of stair steps
- Find the number of jumps to reach X in the number line from zero
- Minimum steps to color the tree with given colors
- Generate array with minimum sum which can be deleted in P steps
- Count minimum steps to get the given desired array
- Minimum step to reach one
- Make array elements equal in Minimum Steps
- Minimum steps to come back to starting point in a circular tour
- Find minimum number to be divided to make a number a perfect square

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.