Related Articles

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

• Difficulty Level : Easy
• Last Updated : 11 May, 2021

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

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

## Javascript

 ``

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 write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.