# Count numbers whose difference with N is equal to XOR with N

Given a number N. The task is to count the all possible values of x such that nx is equal to (N-x), where denotes bitwise XOR operation.

Examples:

```Input: N = 3
Output: 4
The all possible values of x are respectively 0, 1, 2, 3.

Input: N = 6
Output: 4
The all possible values of x are respectively 0, 2, 4, 6.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The XOR value of two bits will be 1 if both bits have opposite sign, and 0 when both bits are same. So on the basis of the property of XOR, we can say that n x is always greater than or equal to n-x. The only condition when its value is equal with n-x is bits of x form a subset of bits of n. Because if in the i’th position both x and n has set bits then after xor the value will decrease, and the decreased value will be , where i is 0-based position.
So the answer is the total count of subsets of bits of number n is , where k is the count of set bits in n.

Below is the implementation of above approach:

## C++

 `#include ` `using` `namespace` `std; ` ` `  `// function to Count all values of x ` `void` `count_values(``int` `n) ` `{ ` `    ``// Count set bits in n ` `    ``// by using stl function ` `    ``int` `set_bits = __builtin_popcount(n); ` ` `  `    ``// count all subset of set bits ` `    ``cout << ``pow``(2, set_bits) << ``"\n"``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``int` `n = 27; ` `    ``count_values(n); ` ` `  `    ``return` `0; ` `} `

## Java

 `import` `java.util.*; ` ` `  `class` `Solution ` `{ ` `//count number of set bits ` `static` `int` `__builtin_popcount(``int` `n) ` `{ ` `    ``//count variable ` `    ``int` `count=``0``; ` `     `  `    ``while``(n>``0``) ` `    ``{ ` `        ``//if the bit is 1 ` `        ``if``(n%``2``==``1``) ` `        ``count++; ` `         `  `        ``n=n/``2``; ` `    ``} ` `    ``return` `count; ` `} ` `     `  `// function to Count all values of x  ` `static` `void` `count_values(``int` `n)  ` `{  ` `    ``// Count set bits in n  ` `    ``// by using stl function  ` `    ``int` `set_bits = __builtin_popcount(n);  ` `   `  `    ``// count all subset of set bits  ` `    ``System.out.println((``int``)Math.pow(``2``, set_bits));  ` `}  ` `   `  `// Driver code  ` `public` `static` `void` `main(String args[]) ` `{  ` `   `  `    ``int` `n = ``27``;  ` `    ``count_values(n);  ` `   `  ` `  `}  ` `} ` ` `  `// This code is contributed ` `// by Arnab Kundu `

## Python 3

 `# Python3 program to implement  ` `# above approach ` ` `  `# from math import pow method ` `from` `math ``import` `pow` ` `  `# count number of set bits ` `def` `__builtin_popcount(n) : ` ` `  `    ``# count variable ` `    ``count ``=` `0` ` `  `    ``while` `n > ``0` `: ` ` `  `        ``# if the bit is 1 ` `        ``if` `n ``%` `2` `=``=` `1` `: ` `            ``count ``+``=` `1` ` `  `        ``n ``=` `n``/``/``2` `         `  `    ``return` `count ` ` `  ` `  `# function to Count all values of x  ` `def` `count_values(n) : ` ` `  `    ``set_bits ``=` `__builtin_popcount(n) ` ` `  `    ``# count all subset of set bits  ` `    ``print``(``int``(``pow``(``2``, set_bits))) ` ` `  ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``n ``=` `27` `    ``count_values(n) ` ` `  `# This code is contributed by  ` `# ANKITRAI1 `

## C#

 `using` `System; ` `class` `GFG  ` `{  ` `// count number of set bits  ` `static` `int` `__builtin_popcount(``int` `n)  ` `{  ` `    ``// count variable  ` `    ``int` `count = 0;  ` `     `  `    ``while``(n > 0)  ` `    ``{  ` `        ``//if the bit is 1  ` `        ``if``(n % 2 == 1)  ` `        ``count++;  ` `         `  `        ``n = n / 2;  ` `    ``}  ` `    ``return` `count;  ` `}  ` `     `  `// function to Count all values of x  ` `static` `void` `count_values(``int` `n)  ` `{  ` `    ``// Count set bits in n  ` `    ``// by using stl function  ` `    ``int` `set_bits = __builtin_popcount(n);  ` `     `  `    ``// count all subset of set bits  ` `    ``Console.Write((``int``)Math.Pow(2, set_bits));  ` `}  ` `     `  `// Driver code  ` `public` `static` `void` `Main()  ` `{  ` `    ``int` `n = 27;  ` `    ``count_values(n);  ` `}  ` `}  ` ` `  `// This code is contributed by Smitha `

## PHP

 ` 0) ` `    ``{ ` `        ``//if the bit is 1 ` `        ``if``(``\$n` `% 2 == 1) ` `            ``\$count``++; ` `         `  `        ``\$n` `= ``\$n` `/ 2; ` `    ``} ` `    ``return` `\$count``; ` `} ` `     `  `// function to Count all values of x  ` `function` `count_values(``\$n``)  ` `{  ` `    ``// Count set bits in n  ` `    ``// by using stl function  ` `    ``\$set_bits` `= __builtin_popcount(``\$n``);  ` ` `  `    ``// count all subset of set bits  ` `    ``echo` `(int)pow(2, ``\$set_bits``);  ` `}  ` ` `  `// Driver code  ` `\$n` `= 27;  ` `count_values(``\$n``);  ` ` `  `// This code is contributed ` `// by Akanksha Rai(Abby_akku) ` `?> `

Output:

```16
```

Time Complexity: O(k), where k is number of set bits in N.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.