Count of pairs having bit size at most X and Bitwise OR equal to X

Given a number X, calculate number of possible pairs (a, b) such that bitwise or of a and b is equal to X and number of bits in both a and b is less than equal to number of bits in X.

Examples:

Input: X = 6
Output: 9
Explanation:
The possible pairs of (a, b) are (4, 6), (6, 4), (6, 6), (6, 2), (4, 2), (6, 0), (2, 6), (2, 4), (0, 6).

Input: X = 21
Output: 27
Explanation:
In total there are 27 pairs possible.

Approach: To solve the problem mentioned above follow the steps given below:



  • Iterate through every bit of given number X.
  • If the bit is 1 then from the truth table of Bitwise OR we know that there are 3 combinations possible for that given bit in number a and b that is (0, 1), (1, 0), (1, 1) that is 3 possible ways.
  • If the bit is 0 then from the truth table of Bitwise OR we know that there is only 1 combination possible for that given bit in number a and b that is (0, 0).
  • So our answer will be answer will be 3 * (number of on bits in X).

Below is the implementation of above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to Count number of
// possible pairs of (a, b) such that
// their Bitwise OR gives the value X
  
#include <iostream>
using namespace std;
  
// Function to count the pairs
int count_pairs(int x)
{
    // Initializing answer with 1
    int ans = 1;
  
    // Iterating through bits of x
    while (x > 0) {
  
        // check if bit is 1
        if (x % 2 == 1)
  
            // multiplying ans by 3
            // if bit is 1
            ans = ans * 3;
  
        x = x / 2;
    }
    return ans;
}
  
// Driver code
int main()
{
    int X = 6;
  
    cout << count_pairs(X)
         << endl;
  
    return 0;
}

chevron_right


Output:

9

Time complexity: O(log(X))

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

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.