# Find all pairs (a,b) and (c,d) in array which satisfy ab = cd

Given an array of distinct integers, the task is to find two pairs (a, b) and (c, d) such that ab = cd, where a, b, c and d are distinct elements.

Examples:

```Input  : arr[] = {3, 4, 7, 1, 2, 9, 8}
Output : 4 2 and 1 8
Product of 4 and 2 is 8 and
also product of 1 and 8 is 8 .

Input  : arr[] = {1, 6, 3, 9, 2, 10};
Output : 6 3 and 9 2
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A Simple Solution is to run four loops to generate all possible quadruples of array element. For every quadruple (a, b, c, d), check if a*b = c*d. Time complexity of this solution is O(n4).

An Efficient Solution of this problem is to use hashing. We use product as key and pair as value in hash table.

```1. For i=0 to n-1
2.   For j=i+1 to n-1
a) Find  prod = arr[i]*arr[j]
b) If prod is not available in hash then make
H[prod] = make_pair(i, j) // H is hash table
c) If product is also available in hash
then print previous and current elements
of array
```

## C++

 `// C++ program to find four elements a, b, c ` `// and d in array such that ab = cd ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find out four elements in array ` `// whose product is ab = cd ` `void` `findPairs(``int` `arr[], ``int` `n) ` `{ ` `    ``bool` `found = ``false``; ` `    ``unordered_map<``int``, pair < ``int``, ``int` `> > H; ` `    ``for` `(``int` `i=0; i pp = H[prod]; ` `                ``cout << arr[pp.first] << ``" "` `<< arr[pp.second] ` `                     ``<< ``" and "` `<< arr[i]<<``" "``<

## Java

 `// Java program to find four elements a, b, c ` `// and d in array such that ab = cd ` `import` `java.io.*; ` `import` `java.util.*; ` ` `  `class` `GFG { ` `     `  `    ``public` `static` `class` `pair { ` `         `  `        ``int` `first,second; ` `         `  `        ``pair(``int` `f, ``int` `s) ` `        ``{ ` `            ``first = f; ` `            ``second = s; ` `        ``} ` `    ``}; ` `     `  `    ``// Function to find out four elements  ` `    ``// in array whose product is ab = cd ` `    ``public` `static` `void` `findPairs(``int` `arr[], ``int` `n) ` `    ``{ ` `         `  `        ``boolean` `found = ``false``; ` `        ``HashMap hp =  ` `                     ``new` `HashMap(); ` `         `  `        ``for``(``int` `i = ``0``; i < n; i++) ` `        ``{ ` `            ``for``(``int` `j = i + ``1``; j < n; j++) ` `            ``{ ` `                 `  `                ``// If product of pair is not in  ` `                ``// hash table, then store it ` `                ``int` `prod = arr[i] * arr[j]; ` `                 `  `                ``if``(!hp.containsKey(prod)) ` `                    ``hp.put(prod, ``new` `pair(i,j)); ` `                 `  `                ``// If product of pair is also  ` `                ``// available in then print  ` `                ``// current and previous pair  ` `                ``else` `                ``{ ` `                    ``pair p = hp.get(prod); ` `                    ``System.out.println(arr[p.first]  ` `                              ``+ ``" "` `+ arr[p.second] ` `                              ``+ ``" "` `+ ``"and"` `+ ``" "` `+  ` `                             ``arr[i] + ``" "` `+ arr[j]); ` `                    ``found = ``true``; ` `                ``} ` `            ``} ` `        ``} ` `         `  `        ``// If no pair find then print not found ` `        ``if``(found == ``false``) ` `        ``System.out.println(``"No pairs Found"``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `        ``int` `arr[] = {``1``, ``2``, ``3``, ``4``, ``5``, ``6``, ``7``, ``8``}; ` `        ``int` `n = arr.length; ` `        ``findPairs(arr, n);     ` `    ``} ` `} ` ` `  `// This code is contributed by akash1295. `

## Python3

 `# Python3 program to find four elements  ` `# a, b, c and d in array such that ab = cd ` ` `  `# Function to find out four elements in array ` `# whose product is ab = cd ` `def` `findPairs(arr, n): ` ` `  `    ``found ``=` `False` `    ``H ``=` `dict``() ` ` `  `    ``for` `i ``in` `range``(n): ` ` `  `        ``for` `j ``in` `range``(i ``+` `1``, n): ` `         `  `            ``# If product of pair is not in hash table, ` `            ``# then store it ` `            ``prod ``=` `arr[i] ``*` `arr[j] ` ` `  `            ``if` `(prod ``not` `in` `H.keys()): ` `                ``H[prod] ``=` `[i, j] ` ` `  `            ``# If product of pair is also available in ` `            ``# then prcurrent and previous pair ` `            ``else``: ` `             `  `                ``pp ``=` `H[prod] ` `                ``print``(arr[pp[``0``]], arr[pp[``1``]],  ` `                      ``"and"``, arr[i], arr[j]) ` `                ``found ``=` `True` `     `  `    ``# If no pair find then prnot found ` `    ``if` `(found ``=``=` `False``): ` `        ``print``(``"No pairs Found"``) ` ` `  `# Driver code ` `arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``, ``6``, ``7``, ``8``] ` `n ``=` `len``(arr) ` `findPairs(arr, n) ` ` `  `# This code is contributed ` `# by mohit kumar `

## C#

 `// C# program to find four elements a, b, c ` `// and d in array such that ab = cd ` `using` `System; ` `using` `System.Collections.Generic;  ` ` `  `class` `GFG  ` `{ ` `     `  `    ``public` `class` `pair ` `    ``{ ` `         `  `        ``public` `int` `first,second; ` `         `  `        ``public` `pair(``int` `f, ``int` `s) ` `        ``{ ` `            ``first = f; ` `            ``second = s; ` `        ``} ` `    ``}; ` `     `  `    ``// Function to find out four elements  ` `    ``// in array whose product is ab = cd ` `    ``public` `static` `void` `findPairs(``int``[] arr, ``int` `n) ` `    ``{ ` `         `  `        ``bool` `found = ``false``; ` `        ``Dictionary<``int``, pair> hp =  ` `                    ``new` `Dictionary<``int``, pair>(); ` `         `  `        ``for``(``int` `i = 0; i < n; i++) ` `        ``{ ` `            ``for``(``int` `j = i + 1; j < n; j++) ` `            ``{ ` `                 `  `                ``// If product of pair is not in  ` `                ``// hash table, then store it ` `                ``int` `prod = arr[i] * arr[j]; ` `                 `  `                ``if``(!hp.ContainsKey(prod)) ` `                    ``hp.Add(prod, ``new` `pair(i,j)); ` `                 `  `                ``// If product of pair is also  ` `                ``// available in then print  ` `                ``// current and previous pair  ` `                ``else` `                ``{ ` `                    ``pair p = hp[prod]; ` `                    ``Console.WriteLine(arr[p.first]  ` `                            ``+ ``" "` `+ arr[p.second] ` `                            ``+ ``" "` `+ ``"and"` `+ ``" "` `+  ` `                            ``arr[i] + ``" "` `+ arr[j]); ` `                    ``found = ``true``; ` `                ``} ` `            ``} ` `        ``} ` `         `  `        ``// If no pair find then print not found ` `        ``if``(found == ``false``) ` `        ``Console.WriteLine(``"No pairs Found"``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main (String[] args)  ` `    ``{ ` `        ``int` `[]arr = {1, 2, 3, 4, 5, 6, 7, 8}; ` `        ``int` `n = arr.Length; ` `        ``findPairs(arr, n);  ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

Output:

```1 6 and 2 3
1 8 and 2 4
2 6 and 3 4
3 8 and 4 6
```

Time Complexity : O(n2) assuming hash search and insert operations take O(1) time.

Related Article:
Find four elements a, b, c and d in an array such that a+b = c+d

This article is contributed by DANISH_RAZA . 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.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.