Powers of 2 to required sum using Bit Masking

Given an integer N, the task is to find the numbers which when added after being raised to the Power of 2 gives the integer N.
Examples:
Input: N = 12345
Output: 0, 3, 4, 5, 12, 13
Explanation:
12345 = 2^0 + 2^3 + 2^4 + 2^5 + 2^12 + 2^13
Input: N = 10000
Output: 4, 8, 9, 10, 13
Explanation:
10000 = 2^4 + 2^8 + 2^9 + 2^10 + 2^13
Approach:
- Since every number can be expressed as sum of powers of 2, the task is to print every i when ith bit is set in the binary representation of N.
Illustration:
(29)10 = (11101)2
Thus, in 29, {0, 2, 3, 4} are the indices of the set bits.
20 + 22 + 23 + 24
= 1 + 4 + 8 + 16
= 29
- In order to check if ith bit is set, we only need to check:
if( N & (1 << i) ) == 1
Illustration:
(29)10 = (11101)2
0th bit: 11101 & 1 = 1
1st bit: 11101 & 10 = 0
2nd bit: 11101 & 100 = 1
3rd bit: 11101 & 1000 = 1
4th bit: 11101 & 10000 = 1
Below is the implementation of the above approach.
C++
// C++ Program to split N// into numbers which when// added after being raised// to the power of 2 gives N#include <bits/stdc++.h>using namespace std;// Function to print the numbers// which raised to power of 2// adds up to Nvoid PowerOfTwo(long long N){ for (int i = 0; i < 64; i++) { long long x = 1; // Checking if i-th bit is // set in N or not by // shifting 1 i bits to // the left and performing // AND with N if (N & (x << i)) cout << i << " "; }}// Driver Codeint main(){ long long N = 12345; PowerOfTwo(N); return 0;} |
Java
// Java Program to split N// into numbers which when// added after being raised// to the power of 2 gives Nclass GFG{// Function to print the numbers// which raised to power of 2// adds up to Nstatic void PowerOfTwo(long N){ for (int i = 0; i < 64; i++) { long x = 1; // Checking if i-th bit is // set in N or not by // shifting 1 i bits to // the left and performing // AND with N if ((N & (x << i)) > 0) System.out.print(i + " "); }}// Driver Codepublic static void main(String[] args){ long N = 12345; PowerOfTwo(N);}}// This code is contributed by Amit Katiyar |
Python3
# Python3 program to split N# into numbers which when# added after being raised# to the power of 2 gives N# Function to print the numbers# which raised to power of 2# adds up to Ndef PowerOfTwo(N): for i in range(0, 64): x = 1 # Checking if i-th bit is # set in N or not by # shifting 1 i bits to # the left and performing # AND with N if (N & (x << i)) > 0: print(i, end = " ") # Driver Code if __name__ == "__main__": # Given number N = 12345; # Function call PowerOfTwo(N)# This code is contributed by rock_cool |
C#
// C# Program to split N// into numbers which when// added after being raised// to the power of 2 gives Nusing System;class GFG{// Function to print the numbers// which raised to power of 2// adds up to Nstatic void PowerOfTwo(long N){ for (int i = 0; i < 64; i++) { long x = 1; // Checking if i-th bit is // set in N or not by // shifting 1 i bits to // the left and performing // AND with N if ((N & (x << i)) > 0) Console.Write(i + " "); }}// Driver Codepublic static void Main(){ long N = 12345; PowerOfTwo(N);}}// This code is contributed by Nidhi_biet |
Javascript
<script>// Javascript Program to split N// into numbers which when// added after being raised// to the power of 2 gives N// Function to print the numbers// which raised to power of 2// adds up to Nfunction PowerOfTwo(N){ for (var i = 0; i < 64; i++) { var x = 1; // Checking if i-th bit is // set in N or not by // shifting 1 i bits to // the left and performing // AND with N if ((N & (x * Math.pow(2,i))) >0) document.write( i + " "); }}// Driver Codevar N = 12345;PowerOfTwo(N);// This code is contributed by importantly.</script> |
0 3 4 5 12 13
Time Complexity: O(log N)
Space Complexity: O(1)
For an alternative approach, refer to Powers of 2 to required sum
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



