# Find k numbers which are powers of 2 and have sum N | Set 1

Given two numbers N and K. The task is to print K numbers which are powers of 2 and their sum is N. Print -1 if not possible.

**Examples:**

Input:N = 9, K = 4Output:4 2 2 1 4 + 2 + 2 + 1 = 9Input:N = 4, K = 5Output:-1

**Approach**: The below algorithm can be followed to solve the above problem:

- If the K is less than the number of set bits in N or more than the number of set bits in N, then it is not possible.
- Insert the powers of two at set bits into Priority Queue.
- Iterate in the Priority Queue till we get K elements,
*pop()*the topmost element and - push()
- Once K elements are achieved, print them.

element/2 twice into the Priority Queue again.

Below is the implementation of the above approach:

`// CPP program to find k numbers that ` `// are power of 2 and have sum equal ` `// to N ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// function to print numbers ` `void` `printNum(` `int` `n, ` `int` `k) ` `{ ` ` ` `// Count the number of set bits ` ` ` `int` `x = __builtin_popcount(n); ` ` ` ` ` `// Not-possible conditon ` ` ` `if` `(k < x || k > n) { ` ` ` `cout << ` `"-1"` `; ` ` ` `return` `; ` ` ` `} ` ` ` ` ` `// Stores the number ` ` ` `priority_queue<` `int` `> pq; ` ` ` ` ` `// Get the set bits ` ` ` `int` `two = 1; ` ` ` `while` `(n) { ` ` ` `if` `(n & 1) { ` ` ` `pq.push(two); ` ` ` `} ` ` ` ` ` `two = two * 2; ` ` ` `n = n >> 1; ` ` ` `} ` ` ` ` ` `// Iterate till we get K elements ` ` ` `while` `(pq.size() < k) { ` ` ` ` ` `// Get the topmost element ` ` ` `int` `el = pq.top(); ` ` ` `pq.pop(); ` ` ` ` ` `// Push the elements/2 into ` ` ` `// priority queue ` ` ` `pq.push(el / 2); ` ` ` `pq.push(el / 2); ` ` ` `} ` ` ` ` ` `// Print all elements ` ` ` `int` `ind = 0; ` ` ` `while` `(ind < k) { ` ` ` `cout << pq.top() << ` `" "` `; ` ` ` `pq.pop(); ` ` ` `ind++; ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `n = 9, k = 4; ` ` ` `printNum(n, k); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

4 2 2 1

Represent n as the sum of exactly k powers of two | Set 2

## Recommended Posts:

- Sum of first N natural numbers which are not powers of K
- Sum of fifth powers of the first n natural numbers
- Print all integers that are sum of powers of two given numbers
- Sum of fourth powers of the first n natural numbers
- Sum of fourth powers of first n odd natural numbers
- Sum of first N natural numbers by taking powers of 2 as negative number
- Count numbers in a range having GCD of powers of prime factors equal to 1
- Powers of 2 to required sum
- Represent n as the sum of exactly k powers of two | Set 2
- Representation of a number in powers of other
- Print all prime factors and their powers
- Form a number using corner digits of powers
- Balance pans using given weights that are powers of a number
- Print powers using Anonymous Function in Python
- Sum of largest divisible powers of p (a prime number) in a range

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.