Open In App

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.


 


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: 
 

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

                    
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

                    
# 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

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

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


Article Tags :