 
  Data Structure Data Structure
 Networking Networking
 RDBMS RDBMS
 Operating System Operating System
 Java Java
 MS Excel MS Excel
 iOS iOS
 HTML HTML
 CSS CSS
 Android Android
 Python Python
 C Programming C Programming
 C++ C++
 C# C#
 MongoDB MongoDB
 MySQL MySQL
 Javascript Javascript
 PHP PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count of values of x <= n for which (n XOR x) = (n – x) in C++
We are given a number n as input. The goal is to find values x such that condition (n xor x)=(nx) holds. Also x lies in range [0,n].
Let us understand with examples
Input − n=10
Output − Count of values of x <= n for which (n XOR x) = (n – x) are − 4
Explanation − Values of x with 10 xor x = 10-x − 0, 2, 8 and 10.
Input − n=15
Output − Count of values of x <= n for which (n XOR x) = (n – x) are − 16
Explanation − Values of x with 15 xor x = 15-x − 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 and 15.
Approach used in the below program is as follows
We will use two approaches. First naive approach using for loops. Start traversing from i=0 to i<=n for i as possible x’s. Now check if ( n - i == (n ^ i) //xor ). If true increment count.
- Take integer variable n as input. 
- Function unique_pair(int arr[], int size) takes array and its length and returns the number of unique pairs such that in pair (arr[i],arr[j]) index i<j 
- Take the initial value of count as 0. 
- Take a set ‘se’ containing integer pairs. (set<pair<int, int>> se) 
- Start traversing arr[] using two for loops. from i=0 to i<size-1 and j=i+1 to j<size. 
- For each pair always i<j, add pair (arr[i],arr[j]) to ‘se’ using se.insert(make_pair(arr[i], arr[j])); 
- At the end of both for loop, update count=se.size(). 
- Count now has a number of pairs in ‘se’. ( All are unique ). 
- Return count as result. 
Efficient Approach
In this approach we will first convert n to its binary equivalent. We know that
1 xor 0 = 1-0
1 xor 1 = 1-1
But
0 xor 0 ≠ 0-1
0 xor 1 ≠ 0-1
So for every 1 in binary representation of n, there are 2 cases. For p ones in binary representation of n, there will be 2p values that satisfy the condition.
index i. Then add individual such counts for total unique pairs.
- Take integer variable n as input. 
- Function unique_pair(int arr[], int size) takes array and its length and returns the number of unique pairs such that in pair (arr[i],arr[j]) index i<j 
- Take the initial value of count as 0. 
- Convert n to string using number=bitset<8>(n).to_string(); 
- Take length=number.length(). 
- Traverse string using for loop from index i=0 to i<length. For each 1 increment count. 
- Set count=pow(2,count) as final values of x. 
- Return count as result. 
Example (naive approach)
#include<bits/stdc++.h> using namespace std; int count_values(int n){    int count = 0;    for (int i = 0; i <= n; i++){       if (n - i == (n ^ i)){          count++;       }    }    return count; } int main(){    int n = 25;    cout<<"Count of values of x <= n for which (n XOR x) = (n – x) are: "<<count_values(n);    return 0; }  Output
If we run the above code it will generate the following output −
Count of values of x <= n for which (n XOR x) = (n – x) are: 8
Example (Efficient Approach)
#include<bits/stdc++.h> using namespace std; int count_values(int n){    int count = 0;    string number = bitset<8>(n).to_string();    int length = number.length();    for (int i = 0; i < length; i++){       if (number.at(i) == '1')          { count++; }    }    count = (int)pow(2, count);    return count; } int main(){    int n = 25;    cout<<"Count of values of x <= n for which (n XOR x) = (n – x) are: "<<count_values(n);    return 0; }  Output
If we run the above code it will generate the following output −
Count of values of x <= n for which (n XOR x) = (n – x) are: 8
