# 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 N` `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) {`   `            ``// Update result` `            ``result++;` `        ``}` `    ``}` `    ``cout << result << endl;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 43;`   `    ``count_setbit(N);` `    ``return` `0;` `}`

## C

 `// C program for above approach` `#include `   `// Function to count of set bit in N` `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) {`   `            ``// Update result` `            ``result++;` `        ``}` `    ``}` `    ``printf``(``"%d\n"``, result);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 43;`   `    ``count_setbit(N);` `    ``return` `0;` `}`

## Java

 `// Java program for above approach` `public` `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 N` `def` `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 approach` `using` `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)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next