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 n\oplusx is equal to (N-x), where \oplus 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.


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 \oplusx 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 2^{i}, where i is 0-based position.
So the answer is the total count of subsets of bits of number n is 2^{k}, where k is the count of set bits in n.

Below is the implementation of above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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)
?>

chevron_right


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.