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

Given a number N. The task is to count 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.

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 experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.

**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 <bits/stdc++.h>` `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

`<?php` `// count number of set bits` `function` `__builtin_popcount(` `$n` `)` `{` ` ` `// count variable` ` ` `$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` `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)` `?>` |

## Javascript

`<script>` `// count number of set bits` `function` `__builtin_popcount(n)` `{` ` ` `// count variable` ` ` `let count = 0;` ` ` ` ` `while` `(n > 0)` ` ` `{` ` ` `//if the bit is 1` ` ` `if` `(n % 2 == 1)` ` ` `count++;` ` ` ` ` `n = parseInt(n / 2);` ` ` `}` ` ` `return` `count;` `}` `// function to Count all values of x` `function` `count_values(n)` `{` ` ` `// Count set bits in n` ` ` `// by using stl function` ` ` `let set_bits = __builtin_popcount(n);` ` ` `// count all subset of set bits` ` ` `document.write(Math.pow(2, set_bits) + ` `"<br>"` `);` `}` `// Driver code` ` ` `let n = 27;` ` ` `count_values(n);` `</script>` |

**Output:**

16

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