Given an integer **N**, the task is to find the minimum number of coins of the form **2 ^{i}** required to make a change for

**N**cents.

**Examples:**

Input:N = 5

Output:2

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(N^{2})

**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 **2**s. 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 <bits/stdc++.h> ` `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; ` `} ` |

*chevron_right*

*filter_none*

## C

`// C program for above approach ` `#include <stdio.h> ` ` ` `// 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; ` `} ` |

*chevron_right*

*filter_none*

## 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); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

## 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); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

**Output:**

4

**Time Complexity:** O(log_{2}(N))**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.