# Minimum division by 10 and multiplication by 2 required to reduce given number to 1

• Last Updated : 26 Apr, 2021

Given an integer N, the task is to reduce N to 1 by a minimum number of operations involving multiplication by 2 and division by 10. If 1 cannot be obtained, then print “-1”.

Examples:

Input: N = 5
Output: 2
Explanation:
Below are the operations performed:
1st operation: Multiply N by 2. Therefore, N = 5 * 2 = 10.
2nd operation: Divide N by 10. Therefore, N = 10/10 = 1.
Therefore, minimum number of operations required is 2.

Input: N = 4
Output: -1

Approach: The idea is to check prime factors of the given number M. If the given number has prime factors other than 2 and 5, then it is not possible to reduce the given number to 1 by the given operations. If the count of 2 exceeds that of 5 in its prime factors, then it is not possible to reduce N to 1 as all powers of 2 can’t be reduced.
Follow the steps below to solve the problem:

• Count the number of 2s present in prime factors of N and store it in a variable, say cnt2, and update N to N / 2cnt2.
• Count the number of 5s present in prime factors of N and store it in a variable, say cnt5, and update N to N / 5cnt5.
• After completing the above steps, if N is 1 and cnt2 ≤ cnt5, then the minimum number of steps required is 2 * cnt5 – cnt2.
• Otherwise, print “-1” as N can’t be reduced to 1 with the given operations.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to find the minimum number` `// operations required to reduce N to 1` `int` `minimumMoves(``int` `n)` `{`   `    ``// Stores count of powers of 2 and 5` `    ``int` `cnt2 = 0, cnt5 = 0;`   `    ``// Calculating the primefactors 2` `    ``while` `(n % 2 == 0) {` `        ``n /= 2;` `        ``cnt2++;` `    ``}`   `    ``// Calculating the primefactors 5` `    ``while` `(n % 5 == 0) {` `        ``n /= 5;` `        ``cnt5++;` `    ``}`   `    ``// If n is 1 and cnt2 <= cnt5` `    ``if` `(n == 1 && cnt2 <= cnt5) {`   `        ``// Return the minimum operations` `        ``return` `2 * cnt5 - cnt2;` `    ``}`   `    ``// Otherwise, n can't be reduced` `    ``else` `        ``return` `-1;` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given Number N` `    ``int` `N = 25;`   `    ``// Function Call` `    ``cout << minimumMoves(N);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `import` `java.util.*;`   `class` `GFG{`   `// Function to find the minimum number` `// operations required to reduce N to 1` `static` `int` `minimumMoves(``int` `n)` `{` `    `  `    ``// Stores count of powers of 2 and 5` `    ``int` `cnt2 = ``0``, cnt5 = ``0``;`   `    ``// Calculating the primefactors 2` `    ``while` `(n % ``2` `== ``0``)` `    ``{` `        ``n /= ``2``;` `        ``cnt2++;` `    ``}`   `    ``// Calculating the primefactors 5` `    ``while` `(n % ``5` `== ``0``) ` `    ``{` `        ``n /= ``5``;` `        ``cnt5++;` `    ``}`   `    ``// If n is 1 and cnt2 <= cnt5` `    ``if` `(n == ``1` `&& cnt2 <= cnt5)` `    ``{` `        `  `        ``// Return the minimum operations` `        ``return` `2` `* cnt5 - cnt2;` `    ``}`   `    ``// Otherwise, n can't be reduced` `    ``else` `        ``return` `-``1``;` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    `  `    ``// Given Number N` `    ``int` `N = ``25``;`   `    ``// Function Call` `    ``System.out.print(minimumMoves(N));` `}` `}`   `// This code is contributed by Amit Katiyar`

## Python3

 `# Python3 program for the above approach`   `# Function to find the minimum number` `# operations required to reduce N to 1` `def` `minimumMoves(n):`   `    ``# Stores count of powers of 2 and 5` `    ``cnt2 ``=` `0` `    ``cnt5 ``=` `0`   `    ``# Calculating the primefactors 2` `    ``while` `(n ``%` `2` `=``=` `0``):` `        ``n ``/``/``=` `2` `        ``cnt2 ``+``=` `1`   `    ``# Calculating the primefactors 5` `    ``while` `(n ``%` `5` `=``=` `0``):` `        ``n ``/``/``=` `5` `        ``cnt5 ``+``=` `1`   `    ``# If n is 1 and cnt2 <= cnt5` `    ``if` `(n ``=``=` `1` `and` `cnt2 <``=` `cnt5):` `        `  `        ``# Return the minimum operations` `        ``return` `2` `*` `cnt5 ``-` `cnt2`   `    ``# Otherwise, n can't be reduced` `    ``else``:` `        ``return` `-``1`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    `  `    ``# Given Number N` `    ``N ``=` `25`   `    ``# Function Call` `    ``print``(minimumMoves(N))`   `# This code is contributed by mohit kumar 29`

## C#

 `// C# program for the above approach` `using` `System;`   `class` `GFG{`   `// Function to find the minimum number` `// operations required to reduce N to 1` `static` `int` `minimumMoves(``int` `n)` `{` `    `  `    ``// Stores count of powers of 2 and 5` `    ``int` `cnt2 = 0, cnt5 = 0;`   `    ``// Calculating the primefactors 2` `    ``while` `(n % 2 == 0)` `    ``{` `        ``n /= 2;` `        ``cnt2++;` `    ``}`   `    ``// Calculating the primefactors 5` `    ``while` `(n % 5 == 0) ` `    ``{` `        ``n /= 5;` `        ``cnt5++;` `    ``}`   `    ``// If n is 1 and cnt2 <= cnt5` `    ``if` `(n == 1 && cnt2 <= cnt5)` `    ``{` `        `  `        ``// Return the minimum operations` `        ``return` `2 * cnt5 - cnt2;` `    ``}`   `    ``// Otherwise, n can't be reduced` `    ``else` `        ``return` `-1;` `}`   `// Driver Code` `public` `static` `void` `Main()` `{` `    `  `    ``// Given Number N` `    ``int` `N = 25;`   `    ``// Function Call` `    ``Console.WriteLine(minimumMoves(N));` `}` `}`   `// This code is contributed by SURENDRA_GANGWAR`

## Javascript

 ``

Output:

`4`

Time Complexity: O(log N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :