# Count pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j])

Given an array arr[], the task is to find the count of pairs from the array such that LCM(arr[i], arr[j]) > min(arr[i], arr[j])
Note: Pairs (arr[i], arr[j]) and (arr[j], arr[i]) are considered identical and will be counted only once.

Examples:

Input: arr[] = {1, 1, 4, 9}
Output: 5
All valid pairs are (1, 4), (1, 9), (1, 4), (1, 9) and (4, 9)

Input: arr[] = {2, 4, 5, 2, 5, 7, 2, 8}
Output: 24

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

Approach: It is observed that only the pairs of the form (arr[i], arr[j]) where arr[i] = arr[j] won’t satisfy the given condition. So, the problem now gets reduced to finding the number of pairs (arr[i], arr[j]) such that arr[i] != arr[j].

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the count of valid pairs ` `int` `count_pairs(``int` `n, ``int` `a[]) ` `{ ` `    ``// Store frequencies of array elements ` `    ``unordered_map<``int``, ``int``> frequency; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``frequency[a[i]]++; ` `    ``} ` ` `  `    ``int` `count = 0; ` ` `  `    ``// Count of pairs (arr[i], arr[j])  ` `    ``// where arr[i] = arr[j] ` `    ``for` `(``auto` `x : frequency) { ` `        ``int` `f = x.second; ` `        ``count += f * (f - 1) / 2; ` `    ``} ` ` `  `    ``// Count of pairs (arr[i], arr[j]) where ` `    ``// arr[i] != arr[j], i.e. Total pairs - pairs  ` `    ``// where arr[i] = arr[j] ` `    ``return` `((n * (n - 1)) / 2) - count; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 2, 4, 5, 2, 5, 7, 2, 8 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``cout << count_pairs(n, arr); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `import` `java.util.HashMap; ` `import` `java.util.Map; ` ` `  `class` `GfG ` `{ ` ` `  `    ``// Function to return the count of valid pairs  ` `    ``static` `int` `count_pairs(``int` `n, ``int` `a[])  ` `    ``{  ` `        ``// Store frequencies of array elements  ` `        ``HashMap frequency = ``new` `HashMap<>();  ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``{  ` `             `  `            ``if` `(!frequency.containsKey(a[i])) ` `                ``frequency.put(a[i], ``0``); ` `            ``frequency.put(a[i], frequency.get(a[i])+``1``);  ` `        ``}  ` `     `  `        ``int` `count = ``0``;  ` `     `  `        ``// Count of pairs (arr[i], arr[j])  ` `        ``// where arr[i] = arr[j]  ` `        ``for` `(Map.Entry x: frequency.entrySet()) ` `        ``{  ` `            ``int` `f = x.getValue();  ` `            ``count += f * (f - ``1``) / ``2``;  ` `        ``}  ` `     `  `        ``// Count of pairs (arr[i], arr[j]) where  ` `        ``// arr[i] != arr[j], i.e. Total pairs - pairs  ` `        ``// where arr[i] = arr[j]  ` `        ``return` `((n * (n - ``1``)) / ``2``) - count;  ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `         `  `        ``int` `arr[] = { ``2``, ``4``, ``5``, ``2``, ``5``, ``7``, ``2``, ``8` `};  ` `        ``int` `n = arr.length;  ` `        ``System.out.println(count_pairs(n, arr)); ` `    ``} ` `} ` `     `  `// This code is contributed by Rituraj Jain `

## Python3

 `# Python3 implementation of the approach  ` ` `  `# Function to return the count  ` `# of valid pairs  ` `def` `count_pairs(n, a) :  ` ` `  `    ``# Store frequencies of array elements  ` `    ``frequency ``=` `dict``.fromkeys(a, ``0``)  ` `    ``for` `i ``in` `range``(n) : ` `        ``frequency[a[i]] ``+``=` `1` ` `  `    ``count ``=` `0` ` `  `    ``# Count of pairs (arr[i], arr[j])  ` `    ``# where arr[i] = arr[j]  ` `    ``for` `f ``in` `frequency.values() :  ` `        ``count ``+``=` `f ``*` `(f ``-` `1``) ``/``/` `2` `     `  `    ``# Count of pairs (arr[i], arr[j]) where  ` `    ``# arr[i] != arr[j], i.e. Total pairs - pairs  ` `    ``# where arr[i] = arr[j]  ` `    ``return` `((n ``*` `(n ``-` `1``)) ``/``/` `2``) ``-` `count ` ` `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"` `: ` `     `  `    ``arr ``=` `[ ``2``, ``4``, ``5``, ``2``,  ` `            ``5``, ``7``, ``2``, ``8` `]  ` `    ``n ``=` `len``(arr) ` `    ``print``(count_pairs(n, arr)) ` ` `  `# This code is contributed by Ryuga `

## C#

 `// C# implementation of the approach ` `using` `System; ` `using` `System.Collections.Generic;  ` ` `  `class` `GfG ` `{ ` ` `  `    ``// Function to return the count of valid pairs  ` `    ``static` `int` `count_pairs(``int` `n, ``int` `[]arr)  ` `    ``{  ` `        ``// Store frequencies of array elements  ` `        ``Dictionary<``int``,``int``> mp = ``new` `Dictionary<``int``,``int``>(); ` `        ``for` `(``int` `i = 0 ; i < n; i++) ` `        ``{ ` `            ``if``(mp.ContainsKey(arr[i])) ` `            ``{ ` `                ``var` `val = mp[arr[i]]; ` `                ``mp.Remove(arr[i]); ` `                ``mp.Add(arr[i], val + 1);  ` `            ``} ` `            ``else` `            ``{ ` `                ``mp.Add(arr[i], 1); ` `            ``} ` `        ``} ` `        ``int` `count = 0;  ` `     `  `        ``// Count of pairs (arr[i], arr[j])  ` `        ``// where arr[i] = arr[j]  ` `        ``foreach``(KeyValuePair<``int``, ``int``> x ``in` `mp) ` `        ``{  ` `            ``int` `f = x.Value;  ` `            ``count += f * (f - 1) / 2;  ` `        ``}  ` `     `  `        ``// Count of pairs (arr[i], arr[j]) where  ` `        ``// arr[i] != arr[j], i.e. Total pairs - pairs  ` `        ``// where arr[i] = arr[j]  ` `        ``return` `((n * (n - 1)) / 2) - count;  ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String []args) ` `    ``{ ` `         `  `        ``int` `[]arr = { 2, 4, 5, 2, 5, 7, 2, 8 };  ` `        ``int` `n = arr.Length;  ` `        ``Console.WriteLine(count_pairs(n, arr)); ` `    ``} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

Output:

```24
```

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.

My Personal Notes arrow_drop_up 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.