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

• Last Updated : 16 Sep, 2022

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

## C++

 `// C++ implementation to Count number of``// possible pairs of (a, b) such that``// their Bitwise OR gives the value X` `#include ``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;``}`

## Java

 `// Java implementation to count number of``// possible pairs of (a, b) such that``// their Bitwise OR gives the value X``class` `GFG{` `// Function to count the pairs``static` `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``public` `static` `void` `main(String[] args)``{``    ``int` `X = ``6``;` `    ``System.out.print(count_pairs(X) + ``"\n"``);``}``}` `// This code is contributed by amal kumar choubey`

## Python3

 `# Python3 implementation to count number of``# possible pairs of (a, b) such that``# their Bitwise OR gives the value X` `# Function to count the pairs``def` `count_pairs(x):` `    ``# Initializing answer with 1``    ``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``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``X ``=` `6``;` `    ``print``(count_pairs(X));` `# This code is contributed by amal kumar choubey`

## C#

 `// C# implementation to count number of``// possible pairs of (a, b) such that``// their Bitwise OR gives the value X``using` `System;``class` `GFG{` `  ``// Function to count the pairs``  ``static` `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``  ``public` `static` `void` `Main(String[] args)``  ``{``    ``int` `X = 6;` `    ``Console.Write(count_pairs(X) + ``"\n"``);``  ``}``}` `// This code is contributed by sapnasingh4991`

## Javascript

 ``

Output:

`9`

Time complexity: O(log(X))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up