Count ways to generate pairs having Bitwise XOR and Bitwise AND equal to X and Y respectively
Input: X = 2, Y = 5
The two possible pairs are (5, 7) and (7, 5).
Pair 1: (5, 7)
Bitwise AND = 5 & 7 = 2
Bitwise XOR = 5 ^ 7 = 5
Pair 2: (7, 5)
Bitwise AND = 7 & 5 = 2
Bitwise XOR = 7 ^ 5 = 5
Input: X = 7, Y = 5
Naive Approach: The simplest approach to solve the problem is to choose the maximum among X and Y and set all its bits and then check all possible pairs from 0 to that maximum number, say M. If for any pair of A and B, A & B and A⊕B becomes equal to X and Y respectively, then increment the count. Print the final value of count after checking for all possible pairs.
Time Complexity: O(M2)
Auxiliary Space: O(1)
Efficient Approach: The idea is to generate all possible combinations of bits at each position. There are 4 possibilities for the ith bit in X and Y which are as follows:
- If Xi = 0 and Yi = 1, then Ai = 1 and Bi = 1.
- If Xi = 1 and Yi = 1, then no possible bit assignment exist.
- If Xi = 0 and Yi = 0 then Ai = 0 and Bi = 0.
- If Xi = 1 and Yi = 0 then Ai = 0 and Bi = 1 or Ai = 1 and Bi = 0, where Ai, Bi, Xi, and Yi represent ith bit in each of them.
Follow the steps below to solve the problem:
- Initialize the counter as 1.
- For the ith bit, if Xi and Yi are equal to 1, then print 0.
- If at ith bit, Xi is 1 and Yi is 0 then multiply the counter by 2 as there are 2 options.
- After that, divide X and Y each time by 2.
- Repeat the above steps for every ith bit until both of them become 0 and print the value of the counter.
Below is the implementation of the above approach:
Time Complexity: O(log M), as we are using a loop to traverse and each time we are decrementing by floor division of 2.
Auxiliary Space: O(1), as we are not using any extra space.