Open In App

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

Last Updated : 25 Aug, 2022
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

Given a number N. The task is to count all possible values of x such that n\oplus   x 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 \oplus   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 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++
#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.

Auxiliary Space: O(1)
 


Next Article

Similar Reads