# 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.

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

Examples:

```Input : N = 4, M = 6
Output : 2
Explanation : 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 = 1
Output : 9
Explanation : Perform operation number two
9 times on N. Then N becomes 1.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :

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

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

Now, the minimum number of operations would be:

1. 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.
2. 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 program to find minimum number ` `// of steps to reach M from N ` `#include ` `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; ` `} `

## Java

 `// Java program 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 `

## Python3

 `# Python3 program 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 `

## C#

 `// C# program 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 `

## 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
```

My Personal Notes arrow_drop_up

pawanasipugmailcom

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.