Skip to content
Related Articles
Check if a number can be expressed as 2^x + 2^y
• Difficulty Level : Medium
• Last Updated : 16 Apr, 2021

Given a number n, we need to check if it can be expressed as 2x + 2y or not . Here x and y can be equal.
Examples :

```Input  : 24
Output : Yes
Explanation: 24 can be expressed as
24 + 23

Input  : 13
output : No
Explanation: It is not possible to
express 13 as sum of two powers of 2.```

If we take few examples, we can notice that a number can be expressed in the form of 2^x + 2^y if the number is already a power of 2 ( for n > 1 ) or the remainder we get after subtracting previous power of two from the number is also a power of 2.
Below is the implementation of above idea

## C++

 `// CPP code to check if a number can be``// expressed as  2^x + 2^y``#include ``using` `namespace` `std;` `// Utility function to check if``// a number is power of 2 or not``bool` `isPowerOfTwo(``int` `n)``{``    ``return` `(n && !(n & (n - 1)));``}` `// Utility function to determine the``// value of previous power of 2``int` `previousPowerOfTwo(``int` `n)``{``    ``while` `(n & n - 1) {``        ``n = n & n - 1;``    ``}``    ``return` `n;``}` `// function to check if n can be expressed``// as 2^x + 2^y or not``bool` `checkSum(``int` `n)``{``    ``// if value of n is 0 or 1``    ``// it can not be expressed as``    ``// 2^x + 2^y``    ``if` `(n == 0 || n == 1)``       ``return` `false``;` `    ``// if a number is power of 2``    ``// then it can be expressed as``    ``// 2^x + 2^y``    ``else` `if` `(isPowerOfTwo(n)) {``        ``cout << ``" "` `<< n / 2 << ``" "` `<< n / 2;``        ``return` `true``;``    ``}` `    ``else` `{``        ``// if the remainder after``        ``// subtracting previous power of 2``        ``// is also a power of 2 then``        ``// it can be expressed as``        ``// 2^x + 2^y``        ``int` `x = previousPowerOfTwo(n);``        ``int` `y = n - x;``        ``if` `(isPowerOfTwo(y)) {``            ``cout << ``" "` `<< x << ``" "` `<< y;``            ``return` `true``;``        ``}``    ``}` `    ``return` `false``;``}` `// driver code``int` `main()``{``    ``int` `n1 = 20;``    ``if` `(checkSum(n1) == ``false``)``        ``cout << ``"No"``;` `    ``cout << endl;``    ``int` `n2 = 11;``    ``if` `(checkSum(n2) == ``false``)``        ``cout << ``"No"``;` `    ``return` `0;``}`

## Java

 `// Java code to check if a number``// can be expressed as 2^x + 2^y` `class` `GFG {` `    ``// Utility function to check if``    ``// a number is power of 2 or not``    ``static` `boolean` `isPowerOfTwo(``int` `n)``    ``{``        ``return` `n != ``0` `&& ((n & (n - ``1``)) == ``0``);``    ``}` `    ``// Utility function to determine the``    ``// value of previous power of 2``    ``static` `int` `previousPowerOfTwo(``int` `n)``    ``{``        ``while` `((n & n - ``1``) > ``1``) {``            ``n = n & n - ``1``;``        ``}``        ``return` `n;``    ``}` `    ``// function to check if``    ``// n can be expressed as``    ``// 2^x + 2^y or not``    ``static` `boolean` `checkSum(``int` `n)``    ``{``        ``// if value of n is 0 or 1``        ``// it can not be expressed as``        ``// 2^x + 2^y``        ``if` `(n == ``0` `|| n == ``1``)``            ``return` `false``;` `        ``// if a number is power of 2``        ``// it can be expressed as``        ``// 2^x + 2^y` `        ``else` `if` `(isPowerOfTwo(n)) {``            ``System.out.println(n / ``2` `+ ``" "` `+ n / ``2``);``        ``}``        ``else` `{` `            ``// if the remainder after``            ``// subtracting previous power of 2``            ``// is also a power of 2 then``            ``// it can be expressed as``            ``// 2^x + 2^y``            ``int` `x = previousPowerOfTwo(n);``            ``int` `y = n - x;``            ``if` `(isPowerOfTwo(y)) {` `                ``System.out.println(x + ``" "` `+ y);``                ``return` `true``;``            ``}``        ``}` `         ``return` `false``;``    ``}``    ``// driver code``    ``public` `static` `void` `main(String[] argc)``    ``{``    ``int` `n1 = ``20``;``    ``if` `(checkSum(n1) == ``false``)``        ``System.out.println(``"No"``);` `    ``System.out.println();``    ``int` `n2 = ``11``;``    ``if` `(checkSum(n2) == ``false``)``        ``System.out.println(``"No"``);``    ``}``}`

## Python3

 `# Python3 code to check if a number``# can be expressed as``# 2 ^ x + 2 ^ y` `# Utility function to check if``# a number is power of 2 or not``def` `isPowerOfTwo( n):``    ``return` `(n ``and` `(``not``(n & (n ``-` `1``))) )``            ` `    ` `# Utility function to determine the``# value of previous power of 2       ``def` `previousPowerOfTwo( n ):   ``    ``while``( n & n``-``1` `):``        ``n ``=` `n & n ``-` `1``    ``return` `n``    ` `# function to check if``# n can be expressed as``# 2 ^ x + 2 ^ y or not``def` `checkSum(n):` `        ``# if value of n is 0 or 1``        ``# it can not be expressed as``        ``# 2 ^ x + 2 ^ y``        ``if` `(n ``=``=` `0` `or` `n ``=``=` `1` `):``            ``return` `False``            ` `        ``# if n is power of two then``        ``# it can be expressed as``        ``# sum of 2 ^ x + 2 ^ y``        ``elif``(isPowerOfTwo(n)):``            ``print``(n``/``/``2``, n``/``/``2``)``            ``return` `True``            ` `        ``# if the remainder after``        ``# subtracting previous power of 2``        ``# is also a power of 2 then``        ``# it can be expressed as``        ``# 2 ^ x + 2 ^ y``        ``else``:``                ``x ``=` `previousPowerOfTwo(n)``                ``y ``=` `n``-``x;``                ``if` `(isPowerOfTwo(y)):``                    ``print``(x, y)``                    ``return` `True``                ``else``:                   ``                    ``return` `False``                    ` `# driver code``n1 ``=` `20``if` `(checkSum(n1)):``  ``print``(``"No"``)` `n2 ``=` `11``if` `(checkSum(n2)):``  ``print``(``"No"``)`

## C#

 `// C# code to check if a number``// can be expressed as``// 2^x + 2^y` `using` `System;``class` `GFG {` `    ``// Utility function to check if``    ``// a number is power of 2 or not``    ``static` `bool` `isPowerOfTwo(``int` `n)``    ``{``        ``return` `n != 0 && ((n & (n - 1)) == 0);``    ``}` `    ``// Utility function to determine the``    ``// value of previous power of 2``    ``static` `int` `previousPowerOfTwo(``int` `n)``    ``{` `        ``while` `((n & n - 1) > 1) {``            ``n = n & n - 1;``        ``}``        ``return` `n;``    ``}` `    ``// function to check if``    ``// n can be expressed as``    ``// 2^x + 2^y or not``    ``static` `bool` `checkSum(``int` `n)``    ``{``        ``// if value of n is 0 or 1``        ``// it can not be expressed as``        ``// 2^x + 2^y``        ``if` `(n == 0 || n == 1) {``            ``Console.WriteLine(``"No"``);``            ``return` `false``;``        ``}` `        ``// if a number is power of``        ``// it can be expressed as``        ``// 2^x + 2^y` `        ``else` `if` `(isPowerOfTwo(n)) {``            ``Console.WriteLine(n / 2 + ``" "` `+ n / 2);``            ``return` `true``;``        ``}` `        ``else` `{` `            ``// if the remainder after``            ``// subtracting previous power  of 2``            ``// is also a power of 2 then``            ``// it can be expressed as``            ``// 2^x + 2^y` `            ``int` `x = previousPowerOfTwo(n);``            ``int` `y = n - x;``            ``if` `(isPowerOfTwo(y)) {``                ``Console.WriteLine(x + ``" "` `+ y);``                ``return` `true``;``            ``}``            ``else` `{``                ``return` `false``;``            ``}``        ``}``    ``}``    ``// driver code``    ``public` `static` `void` `Main()``    ``{``    ``int` `n1 = 20;``    ``if` `(checkSum(n1) == ``false``)``        ``Console.WriteLine(``"No"``);` `    ``Console.WriteLine();``    ``int` `n2 = 11;``    ``if` `(checkSum(n2) == ``false``)``        ``Console.WriteLine(``"No"``);``    ``}``}`

## PHP

 ``

## Javascript

 ``
Output:
```16 4
No```

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up