# Count unordered pairs (i,j) such that product of a[i] and a[j] is power of two

Given an array of N elements. The task is to count unordered pairs (i, j) in the array such that the product of a[i] and a[j] can be expressed as a power of two.

Examples:

```Input : arr[] = {2, 3, 4, 8, 10}
Output : 3
Explanation: The pair of array element will be
(2, 4), (2, 8), (4, 8) whose product are
8, 16, 32 respectively which can be expressed
as power of 2, like 2^3, 2^4, 2^5.

Input : arr[] = { 2, 5, 8, 16, 128 }
Output : 6
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

If you multiply and and their product become , then z=x*y, now if it’s possible to express as power of two then it can be proved that both and can be expressed as power of two. Basically z= 2a = 2(b+c) = 2b * 2c = x * y, where and both
can hold a minimum value 0.

So now we have to count the number of elements in the array which can be expressed as a power of two. If the count is k, then answer will be kC2 = k*(k-1)/2, as we need the count of unordered pairs.

Below is the implementation of above approach:

 `// C++ program to Count unordered pairs (i, j) ` `// in array such that product of a[i] and a[j] ` `// can be expressed as power of two ` `#include ` `using` `namespace` `std; ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo(``int` `x)  ` `{  ` `  ``/* First x in the below expression is ` `     ``for the case when x is 0 */` `  ``return` `x && (!(x&(x-1)));  ` `}  ` ` `  `// Function to Count unordered pairs ` `void` `Count_pairs(``int` `a[], ``int` `n) ` `{ ` `    ``int` `count = 0; ` ` `  `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// is a number can be expressed ` `        ``// as power of two ` `        ``if` `(isPowerOfTwo(a[i])) ` `            ``count++; ` `    ``} ` ` `  `    ``// count total number ` `    ``// of unordered pairs ` `    ``int` `ans = (count * (count - 1)) / 2; ` ` `  `    ``cout << ans << ``"\n"``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `a[] = { 2, 5, 8, 16, 128 }; ` ` `  `    ``int` `n = ``sizeof``(a) / ``sizeof``(a[0]); ` ` `  `    ``Count_pairs(a, n); ` ` `  `    ``return` `0; ` `} `

 `// Java program to Count unordered pairs (i, j) ` `// in array such that product of a[i] and a[j] ` `// can be expressed as power of two ` ` `  `import` `java.io.*; ` ` `  `class` `GFG { ` ` `  ` `  `/* Function to check if x is power of 2*/` `static` `boolean` `isPowerOfTwo(``int` `x)  ` `{  ` `/* First x in the below expression is ` `    ``for the case when x is 0 */` `return` `(x >``0``&& (!((x&(x-``1``))>``0``)));  ` `}  ` ` `  `// Function to Count unordered pairs ` `static` `void` `Count_pairs(``int` `a[], ``int` `n) ` `{ ` `    ``int` `count = ``0``; ` ` `  `    ``for` `(``int` `i = ``0``; i < n; i++) { ` ` `  `        ``// is a number can be expressed ` `        ``// as power of two ` `        ``if` `(isPowerOfTwo(a[i])) ` `            ``count++; ` `    ``} ` ` `  `    ``// count total number ` `    ``// of unordered pairs ` `    ``int` `ans = (count * (count - ``1``)) / ``2``; ` ` `  `    ``System.out.println( ans); ` `} ` ` `  `// Driver code ` ` `  `    ``public` `static` `void` `main (String[] args) { ` `            ``int` `a[] = { ``2``, ``5``, ``8``, ``16``, ``128` `}; ` ` `  `    ``int` `n = a.length; ` `    ``Count_pairs(a, n); ` ` `  `    ``} ` `} ` ` `  `// This code is contributed ` `// by shs `

 `# Python3 program to Count unordered pairs  ` `# (i, j) in array such that product of a[i]  ` `# and a[j] can be expressed as power of two  ` ` `  `# Function to check if x is power of 2 ` `def` `isPowerOfTwo(x) : ` ` `  `    ``# First x in the below expression  ` `    ``# is for the case when x is 0  ` `    ``return` `(x ``and``(``not``(x & (x ``-` `1``)))) ` ` `  `# Function to Count unordered pairs  ` `def` `Count_pairs(a, n) : ` ` `  `    ``count ``=` `0` ` `  `    ``for` `i ``in` `range``(n) : ` ` `  `        ``# is a number can be expressed  ` `        ``# as power of two  ` `        ``if` `isPowerOfTwo(a[i]) : ` `            ``count ``+``=` `1` ` `  `    ``# count total number  ` `    ``# of unordered pairs ` `    ``ans ``=` `(count ``*` `(count ``-` `1``)) ``/` `2` ` `  `    ``print``(ans) ` ` `  `# Driver code      ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``a ``=` `[ ``2``, ``5``, ``8``, ``16``, ``128``] ` ` `  `    ``n ``=` `len``(a) ` ` `  `    ``Count_pairs(a, n) ` `                 `  `# This code is contributed by ANKITRAI1 `

 `// C# program to Count unordered pairs (i, j)  ` `// in array such that product of a[i] and a[j]  ` `// can be expressed as power of two  ` ` `  `using` `System; ` ` `  `public` `class` `GFG{ ` `     `  `     `  `/* Function to check if x is power of 2*/` `static` `bool` `isPowerOfTwo(``int` `x)  ` `{  ` `/* First x in the below expression is  ` `    ``for the case when x is 0 */` `return` `(x >0&& (!((x&(x-1))>0)));  ` `}  ` ` `  `// Function to Count unordered pairs  ` `static` `void` `Count_pairs(``int` `[]a, ``int` `n)  ` `{  ` `    ``int` `count = 0;  ` ` `  `    ``for` `(``int` `i = 0; i < n; i++) {  ` ` `  `        ``// is a number can be expressed  ` `        ``// as power of two  ` `        ``if` `(isPowerOfTwo(a[i]))  ` `            ``count++;  ` `    ``}  ` ` `  `    ``// count total number  ` `    ``// of unordered pairs  ` `    ``int` `ans = (count * (count - 1)) / 2;  ` ` `  `    ``Console.WriteLine( ans);  ` `}  ` ` `  `// Driver code  ` ` `  `    ``static` `public` `void` `Main (){ ` `            ``int` `[]a = { 2, 5, 8, 16, 128 };  ` ` `  `    ``int` `n = a.Length;  ` `    ``Count_pairs(a, n);  ` ` `  `    ``}  ` `}  ` ` `  `// This code is contributed  ` `// by Sach_Code `

 ` `

Output:
```6
```

Time Complexity: O(N), where N is the number of elements in the array.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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.

Improved By : Shashank12, Sach_Code, AnkitRai01

Article Tags :