Given a positive integer . Find the number of steps required to minimize it to 1. In a single step N either got reduced to half if it is power of 2 else N is reduced to difference of N and its nearest power of 2 which is smaller than N.
Input : N = 2 Output : 1 Input : N = 20 Output : 3
Simple Approach: As per question a very simple and brute force approach is to iterate over N until it got reduced to 1, where reduction involve two cases:
- N is power of 2 : reduce n to n/2
- N is not power of 2: reduce n to n – (2^log2(n))
Efficient approach: Before proceeding to actual result lets have a look over bit representation of an integer n as per problem statement.
- When an integer is power of 2: In this case bit -representation includes only one set bit and that too is left most. Hence log2(n) i.e. bit-position minus One is the number of step required to reduce it to n. Which is also equal to number of set bit in n-1.
- When an integer is not power of 2:The remainder of n – 2^(log2(n)) is equal to integer which can be obtained by un-setting the left most set bit. Hence, one set bit removal count as one step in this case.
Hence the actual answer for steps required to reduce n is equal to number of set bits in n-1. Which can be easily calculated either by using the loop or any of method described in the post: Count Set bits in an Integer.
Below is the implementation of the above approach:
- Steps to reduce N to zero by subtracting its most significant digit at every step
- Minimum flips required to maximize a number with k set bits
- Minimum number of operations required to sum to binary string S
- Find maximum operations to reduce N to 1
- Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B
- Count number of subsets having a particular XOR value
- Count total bits in a number
- Count unset bits of a number
- Count number of right triangles possible with a given perimeter
- Count pairs with Bitwise OR as Even number
- Count pairs with Bitwise AND as ODD number
- Count pairs with Bitwise XOR as ODD number
- Count pairs with Bitwise XOR as EVEN number
- Count pairs with Bitwise-AND as even number
- Count pairs (A, B) such that A has X and B has Y number of set bits and A+B = C