Related Articles

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

• Difficulty Level : Basic
• Last Updated : 06 May, 2021

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

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

 `// 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);` `    ``Count_pairs(a, n);` `    ``return` `0;``}`

## Java

 `// 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`

## Python 3

 `# 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#

 `// 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`

## PHP

 ``

## Javascript

 ``
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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up