# Count pairs of elements such that number of set bits in their OR is B[i]

Given two arrays **A[]** and **B[]** of **N** elements each. The task is to find the number of index pairs **(i, j)** such that **i ≤ j** and **F(A[i] | A[j]) = B[j]** where **F(X)** is the count of set bits in the binary representation of **X**.**Examples**

Input:A[] = {5, 3, 2, 4, 6, 1}, B[] = {2, 2, 1, 4, 2, 3}Output:7

All possible pairs are (5, 5), (3, 3), (2, 2),

(2, 6), (4, 6), (6, 6) and (6, 1).Input:A[] = {4, 3, 5, 6, 7}, B[] = {1, 3, 2, 4, 5}Output:4

**Approach:** Iterate through all the possible pairs (i, j) and check the count of set bits in their OR value. If the count is equal to B[j] then increment the count.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the count of pairs` `// which satisfy the given condition` `int` `solve(` `int` `A[], ` `int` `B[], ` `int` `n)` `{` ` ` `int` `cnt = 0;` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `for` `(` `int` `j = i; j < n; j++)` ` ` `// Check if the count of set bits` ` ` `// in the OR value is B[j]` ` ` `if` `(__builtin_popcount(A[i] | A[j]) == B[j]) {` ` ` `cnt++;` ` ` `}` ` ` `return` `cnt;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `A[] = { 5, 3, 2, 4, 6, 1 };` ` ` `int` `B[] = { 2, 2, 1, 4, 2, 3 };` ` ` `int` `size = ` `sizeof` `(A) / ` `sizeof` `(A[0]);` ` ` `cout << solve(A, B, size);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `class` `GFG` `{` `// Function to return the count of pairs` `// which satisfy the given condition` `static` `int` `solve(` `int` `A[], ` `int` `B[], ` `int` `n)` `{` ` ` `int` `cnt = ` `0` `;` ` ` `for` `(` `int` `i = ` `0` `; i < n; i++)` ` ` `for` `(` `int` `j = i; j < n; j++)` ` ` `// Check if the count of set bits` ` ` `// in the OR value is B[j]` ` ` `if` `(Integer.bitCount(A[i] | A[j]) == B[j])` ` ` `{` ` ` `cnt++;` ` ` `}` ` ` `return` `cnt;` `}` `// Driver code` `public` `static` `void` `main(String args[])` `{` ` ` `int` `A[] = { ` `5` `, ` `3` `, ` `2` `, ` `4` `, ` `6` `, ` `1` `};` ` ` `int` `B[] = { ` `2` `, ` `2` `, ` `1` `, ` `4` `, ` `2` `, ` `3` `};` ` ` `int` `size = A.length;` ` ` `System.out.println(solve(A, B, size));` `}` `}` `// This code is contributed by 29AjayKumar` |

## Python3

`# Python3 implementation of the approach` `# Function to return the count of pairs` `# which satisfy the given condition` `def` `solve(A, B, n) :` ` ` `cnt ` `=` `0` `;` ` ` `for` `i ` `in` `range` `(n) :` ` ` `for` `j ` `in` `range` `(i, n) :` ` ` `# Check if the count of set bits` ` ` `# in the OR value is B[j]` ` ` `if` `(` `bin` `(A[i] | A[j]).count(` `'1'` `) ` `=` `=` `B[j]) :` ` ` `cnt ` `+` `=` `1` `;` ` ` ` ` `return` `cnt` `# Driver code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `A ` `=` `[ ` `5` `, ` `3` `, ` `2` `, ` `4` `, ` `6` `, ` `1` `];` ` ` `B ` `=` `[ ` `2` `, ` `2` `, ` `1` `, ` `4` `, ` `2` `, ` `3` `];` ` ` `size ` `=` `len` `(A);` ` ` `print` `(solve(A, B, size));` `# This code is contributed by AnkitRai01` |

## C#

`// C# implementation of the approach` `using` `System;` `class` `GFG` `{` `// Function to return the count of pairs` `// which satisfy the given condition` `static` `int` `solve(` `int` `[]A, ` `int` `[]B, ` `int` `n)` `{` ` ` `int` `cnt = 0;` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `for` `(` `int` `j = i; j < n; j++)` ` ` `// Check if the count of set bits` ` ` `// in the OR value is B[j]` ` ` `if` `(bitCount(A[i] | A[j]) == B[j])` ` ` `{` ` ` `cnt++;` ` ` `}` ` ` `return` `cnt;` `}` `static` `int` `bitCount(` `long` `x)` `{` ` ` `// To store the count` ` ` `// of set bits` ` ` `int` `setBits = 0;` ` ` `while` `(x != 0)` ` ` `{` ` ` `x = x & (x - 1);` ` ` `setBits++;` ` ` `}` ` ` `return` `setBits;` `}` `// Driver code` `public` `static` `void` `Main(String []args)` `{` ` ` `int` `[]A = { 5, 3, 2, 4, 6, 1 };` ` ` `int` `[]B = { 2, 2, 1, 4, 2, 3 };` ` ` `int` `size = A.Length;` ` ` `Console.WriteLine(solve(A, B, size));` `}` `}` `/* This code is contributed by PrinciRaj1992 */` |

## Javascript

`<script>` `// JavaScript implementation of the approach` `// Function to return the count of pairs` `// which satisfy the given condition` `function` `solve(A,B,n)` `{` ` ` `let cnt = 0;` ` ` ` ` `for` `(let i = 0; i < n; i++)` ` ` `for` `(let j = i; j < n; j++)` ` ` ` ` `// Check if the count of set bits` ` ` `// in the OR value is B[j]` ` ` `if` `(bitCount(A[i] | A[j]) == B[j])` ` ` `{` ` ` `cnt++;` ` ` `}` ` ` ` ` `return` `cnt;` `}` `function` `bitCount(x)` `{` ` ` `// To store the count` ` ` `// of set bits` ` ` `let setBits = 0;` ` ` `while` `(x != 0)` ` ` `{` ` ` `x = x & (x - 1);` ` ` `setBits++;` ` ` `}` ` ` `return` `setBits;` `}` `// Driver code` `let A=[5, 3, 2, 4, 6, 1 ];` `let B=[2, 2, 1, 4, 2, 3 ];` `let size = A.length;` `document.write(solve(A, B, size));` `// This code is contributed by rag2127` `</script>` |

**Output:**

7