# Minimum number of coins having value equal to powers of 2 required to obtain N

Given an integer N, the task is to find the minimum number of coins of the form 2i required to make a change for N cents.

Examples:

Input: N = 5
Output:
Explanation:
Possible values of coins are: {1, 2, 4, 8, …}
Possible ways to make change for N cents are as follows:
5 = 1 + 1 + 1 + 1 + 1
5 = 1 + 2 + 2
5 = 1 + 4 (Minimum)
Therefore, the required output is 2

Input: N = 4
Output: 4

Naive Approach: The simplest approach to solve this problem is to store all possible values of the coins in an array and print the minimum count of coins required to make a change for N cents using Dynamic programming
Time Complexity: O(N2)
Auxiliary Space: O(N)

Efficient Approach: The above approach can be optimized using the fact that any number can be represented in the form of a power of 2s. The idea is to count the set bits of N and print the count obtained. Follow the steps below to solve the problem:

• Iterate over the bits in the binary representation of N and check if the current bit is set or not. If found to be true, then increment the count.
• Finally, print the total count obtained.

Below is the implementation of the above approach:

## C++

 // C++ program for above approach#include using namespace std; // Function to count of set bit in Nvoid count_setbit(int N){     // Stores count of set bit in N    int result = 0;     // Iterate over the range [0, 31]    for (int i = 0; i < 32; i++) {         // If current bit is set        if ((1 << i) & N) {             // Update result            result++;        }    }    cout << result << endl;} // Driver Codeint main(){    int N = 43;     count_setbit(N);    return 0;}

## C

 // C program for above approach#include  // Function to count of set bit in Nvoid count_setbit(int N){     // Stores count of set bit in N    int result = 0;     // Iterate over the range [0, 31]    for (int i = 0; i < 32; i++) {         // If current bit is set        if ((1 << i) & N) {             // Update result            result++;        }    }    printf("%d\n", result);} // Driver Codeint main(){    int N = 43;     count_setbit(N);    return 0;}

## Java

 // Java program for above approachpublic class Main {     // Function to count of set bit in N    public static void count_setbit(int N)    {        // Stores count of set bit in N        int result = 0;         // Iterate over the range [0, 31]        for (int i = 0; i < 32; i++) {             // If current bit is set            if (((1 << i) & N) > 0) {                 // Update result                result++;            }        }         System.out.println(result);    }     // Driver Code    public static void main(String[] args)    {         int N = 43;        count_setbit(N);    }}

## Python

 # Python program for above approach # Function to count of set bit in Ndef count_setbit(N):     # Stores count of set bit in N    result = 0         # Iterate over the range [0, 31]    for i in range(32):            # If current bit is set          if( (1 << i) & N ):                       # Update result           result = result + 1         print(result) if __name__ == '__main__':     N = 43    count_setbit(N)

## C#

 // C# program for above approachusing System;class GFG {     // Function to count of setbit in N    static void count_setbit(int N)    {         // Stores count of setbit in N        int result = 0;         // Iterate over the range [0, 31]        for (int i = 0; i < 32; i++) {             // If current bit is set            if (((1 << i) & N) > 0) {                 // Update result                result++;            }        }         Console.WriteLine(result);    }     // Driver Code    static void Main()    {         int N = 43;        count_setbit(N);    }}

## Javascript



Output:
4

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

Previous
Next