 GeeksforGeeks App
Open App Browser
Continue

# Check if a number can be represented as sum of non zero powers of 2

Given an integer N, the task is to check whether N can be represented as the sum of powers of 2 where all the powers are > 0 i.e. 20 cannot contribute to the sum.
Examples:

Input: N = 10
Output:
23 + 21 = 10
Input: N = 9
Output:

Approach: There are two cases:

1. When N is even then it can always be represented as the sum of powers of 2 when power > 0.
2. When N is odd then it can never be represented as the sum of powers of 2 if 20 is not included in the sum.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function that return true if n``// can be represented as the sum``// of powers of 2 without using 2^0``bool` `isSumOfPowersOfTwo(``int` `n)``{``    ``if` `(n % 2 == 1)``        ``return` `false``;``    ``else``        ``return` `true``;``}` `// Driver code``int` `main()``{``    ``int` `n = 10;``    ``if` `(isSumOfPowersOfTwo(n))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG {` `    ``// Function that return true if n``    ``// can be represented as the sum``    ``// of powers of 2 without using 2^0``    ``static` `boolean isSumOfPowersOfTwo(``int` `n)``    ``{``        ``if` `(n % 2 == 1)``            ``return` `false``;``        ``else``            ``return` `true``;``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `n = 10;``        ``if` `(isSumOfPowersOfTwo(n))``            ``System.out.print(``"Yes"``);``        ``else``            ``System.out.print(``"No"``);``    ``}``}`

## Python3

 `# Python3 implementation of the approach` `# Function that return true if n``# can be represented as the sum``# of powers of 2 without using 2^0``def` `isSumOfPowersOfTwo(n):``    ``if` `n ``%` `2` `=``=` `1``:``        ``return` `False``    ``else``:``        ``return` `True` `# Driver code``n ``=` `10``if` `isSumOfPowersOfTwo(n):``    ``print``(``"Yes"``)``else``:``    ``print``(``"No"``)` `# This code is contributed``# by Shrikant13`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG {` `    ``// Function that return true if n``    ``// can be represented as the sum``    ``// of powers of 2 without using 2^0``    ``static` `bool` `isSumOfPowersOfTwo(``int` `n)``    ``{``        ``if` `(n % 2 == 1)``            ``return` `false``;``        ``else``            ``return` `true``;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 10;``        ``if` `(isSumOfPowersOfTwo(n))``            ``Console.WriteLine(``"Yes"``);``        ``else``            ``Console.WriteLine(``"No"``);``    ``}``}`

## PHP

 ``

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(1)

Auxiliary Space: O(1)

Approach 2:

Here’s another approach to solve the problem:

• Initialize a variable i to 1.
• While i is less than n, do the following steps:
• a. If i is a power of 2, compute n-i.
• b. If n-i is also a power of 2, return true.
• c. Increment i by 1.
• If none of the pairs (i, n-i) are both powers of 2, return false.

Here’s the code for the above approach:

## C++

 `#include ``#include ``using` `namespace` `std;` `bool` `isPowerOfTwo(``int` `n) {``    ``if` `(n == 0) {``        ``return` `false``;``    ``}``    ``return` `(``ceil``(log2(n)) == ``floor``(log2(n)));``}` `bool` `canSumToPowerOfTwo(``int` `n) {``    ``for` `(``int` `i = 1; i < n; i++) {``        ``if` `(isPowerOfTwo(i) && isPowerOfTwo(n-i)) {``            ``return` `true``;``        ``}``    ``}``    ``return` `false``;``}` `int` `main() {``    ``int` `n = 10;``    ``if` `(canSumToPowerOfTwo(n)) {``        ``cout << ``"Yes"` `<< endl;``    ``}``    ``else` `{``        ``cout << ``"No"` `<< endl;``    ``}``    ``return` `0;``}`

## Javascript

 `// This function determines if a given integer n is a power of two``function` `isPowerOfTwo(n) {``    ``if` `(n == 0) {``        ``return` `false``;``    ``}``    ``return` `(Math.ceil(Math.log2(n)) == Math.floor(Math.log2(n)));``}` `// This function determines if it is possible to represent a given integer n``// as the sum of two distinct powers of two``function` `canSumToPowerOfTwo(n) {` `    ``// Loop through all possible pairs of powers of two that sum to n``    ``for` `(let i = 1; i < n; i++) {``        ``if` `(isPowerOfTwo(i) && isPowerOfTwo(n-i)) {``            ``return` `true``;``        ``}``    ``}` `    ``// If no such pair exists, return false``    ``return` `false``;``}` `// Test the function with some sample input``let n = 10;``if` `(canSumToPowerOfTwo(n)) {``    ``console.log(``"Yes"``);``}``else` `{``    ``console.log(``"No"``);``}`

Output:

`Yes`

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up