# Find all numbers that divide maximum array elements

Given an array of N numbers, the task is to print all the numbers greater than 1 which divide the maximum of array elements.

Examples:

Input: a[] = {6, 6, 12, 18, 13}
Output: 2 3 6
All the numbers divide the maximum of array elements i.e., 4

Input: a[] = {12, 15, 27, 20, 40}
Output: 2 3 4 5

Approach:

• Use hashing to store the count of all the factors of every array element. We can find all the factors of number in O(sqrt N).
• Traverse for all factors, and find the count of maximum array elements which are divided by numbers.
• Again re-traverse for all factors and print the factors that occur the maximum number of times.

Below is the implementation of the above approach.

## C++

 `// C++ program to print all the numbers ` `// that divides maximum of array elements ` `#include ` `using` `namespace` `std; ` ` `  `// Function that prints all the numbers ` `// which divides maximum of array elements ` `void` `printNumbers(``int` `a[], ``int` `n) ` `{ ` ` `  `    ``// hash to store the number of times ` `    ``// a factor is there ` `    ``unordered_map<``int``, ``int``> mpp; ` ` `  `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``int` `num = a[i]; ` ` `  `        ``// find all the factors ` `        ``for` `(``int` `j = 1; j * j <= num; j++) { ` ` `  `            ``// if j is factor of num ` `            ``if` `(num % j == 0) { ` `                ``if` `(j != 1) ` `                    ``mpp[j]++; ` ` `  `                ``if` `((num / j) != j) ` `                    ``mpp[num / j]++; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// find the maximum times ` `    ``// it can divide ` `    ``int` `maxi = 0; ` `    ``for` `(``auto` `it : mpp) { ` `        ``maxi = max(it.second, maxi); ` `    ``} ` ` `  `    ``// print all the factors of ` `    ``// numbers which divides the ` `    ``// maximum array elements ` `    ``for` `(``auto` `it : mpp) { ` `        ``if` `(it.second == maxi) ` `            ``cout << it.first << ``" "``; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` ` `  `    ``int` `a[] = { 12, 15, 27, 20, 40 }; ` `    ``int` `n = ``sizeof``(a) / ``sizeof``(a); ` `    ``printNumbers(a, n); ` `} `

## Java

 `// Java program to print all the numbers ` `// that divides maximum of array elements ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `     `  `// Function that prints all the numbers ` `// which divides maximum of array elements ` `static` `void` `printNumbers(``int` `a[], ``int` `n) ` `{ ` ` `  `    ``// hash to store the number of times ` `    ``// a factor is there ` `    ``Map mpp = ``new` `HashMap<>(); ` ` `  `    ``for` `(``int` `i = ``0``; i < n; i++)  ` `    ``{ ` `        ``int` `num = a[i]; ` ` `  `        ``// find all the factors ` `        ``for` `(``int` `j = ``1``; j * j <= num; j++)  ` `        ``{ ` ` `  `            ``// if j is factor of num ` `            ``if` `(num % j == ``0``)  ` `            ``{ ` `                ``if` `(j != ``1``) ` `                ``{ ` `                    ``if``(mpp.containsKey(j)) ` `                    ``{ ` `                        ``mpp.put(j, mpp.get(j) + ``1``); ` `                    ``} ` `                    ``else` `                    ``{ ` `                        ``mpp.put(j, ``1``); ` `                    ``} ` `                ``} ` `                 `  `                ``if` `((num / j) != j) ` `                ``{ ` `                    ``if``(mpp.containsKey(num / j)) ` `                    ``{ ` `                        ``mpp.put(num / j, mpp.get(num / j) + ``1``); ` `                    ``} ` `                    ``else` `                    ``{ ` `                        ``mpp.put(num / j, ``1``); ` `                    ``} ` `                ``} ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// find the maximum times ` `    ``// it can divide ` `    ``int` `maxi = ``0``; ` `    ``for` `(Map.Entry it : mpp.entrySet()) ` `    ``{ ` `        ``maxi = Math.max(it.getValue(), maxi); ` `    ``} ` ` `  `    ``// print all the factors of ` `    ``// numbers which divides the ` `    ``// maximum array elements ` `    ``for` `(Map.Entry it : mpp.entrySet()) ` `    ``{ ` `        ``if` `(it.getValue() == maxi) ` `            ``System.out.print(it.getKey() + ``" "``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``int` `a[] = { ``12``, ``15``, ``27``, ``20``, ``40` `}; ` `    ``int` `n = a.length; ` `    ``printNumbers(a, n); ` `} ` `} ` ` `  `// This code is contributed by Princi Singh `

## Python3

 `# Python3 program to print all the numbers ` `# that divides maximum of array elements ` ` `  `# Function that prints all the numbers ` `# which divides maximum of array elements ` `def` `printNumbers(a, n): ` ` `  `    ``# hash to store the number of times ` `    ``# a factor is there ` `    ``mpp ``=` `dict``() ` ` `  `    ``for` `i ``in` `range``(n): ` `        ``num ``=` `a[i] ` ` `  `        ``# find all the factors ` `        ``for` `j ``in` `range``(``1``, num ``+` `1``): ` ` `  `            ``if` `j ``*` `j > num: ` `                ``break` ` `  `            ``# if j is factor of num ` `            ``if` `(num ``%` `j ``=``=` `0``): ` `                ``if` `(j !``=` `1``): ` `                    ``mpp[j]``=``mpp.get(j, ``0``) ``+` `1` ` `  `                ``if` `((num ``/``/` `j) !``=` `j): ` `                    ``mpp[num ``/``/` `j]``=``mpp.get(num``/``/``j, ``0``) ``+` `1` `             `  `    ``# find the maximum times ` `    ``# it can divide ` `    ``maxi ``=` `0` `    ``for` `it ``in` `mpp: ` `        ``maxi ``=` `max``(mpp[it], maxi) ` ` `  `    ``# print all the factors of ` `    ``# numbers which divides the ` `    ``# maximum array elements ` `    ``for` `it ``in` `mpp: ` `        ``if` `(mpp[it] ``=``=` `maxi): ` `            ``print``(it,end``=``" "``) ` `     `  `# Driver Code ` `a ``=` `[``12``, ``15``, ``27``, ``20``, ``40` `] ` `n ``=` `len``(a) ` `printNumbers(a, n) ` ` `  `# This code is contributed by mohit kumar `

## C#

 `// C# program to print all the numbers ` `// that divides maximum of array elements ` `using` `System; ` `using` `System.Collections.Generic;  ` ` `  `class` `GFG ` `{ ` `     `  `// Function that prints all the numbers ` `// which divides maximum of array elements ` `static` `void` `printNumbers(``int` `[]a, ``int` `n) ` `{ ` ` `  `    ``// hash to store the number of times ` `    ``// a factor is there ` `    ``Dictionary<``int``,``int``> mpp = ``new` `Dictionary<``int``,``int``>(); ` ` `  `    ``for` `(``int` `i = 0; i < n; i++)  ` `    ``{ ` `        ``int` `num = a[i]; ` ` `  `        ``// find all the factors ` `        ``for` `(``int` `j = 1; j * j <= num; j++)  ` `        ``{ ` ` `  `            ``// if j is factor of num ` `            ``if` `(num % j == 0)  ` `            ``{ ` `                ``if` `(j != 1) ` `                ``{ ` `                    ``if``(mpp.ContainsKey(j)) ` `                    ``{ ` `                        ``var` `v = mpp[j]; ` `                        ``mpp.Remove(j); ` `                        ``mpp.Add(j, v + 1); ` `                    ``} ` `                    ``else` `                    ``{ ` `                        ``mpp.Add(j, 1); ` `                    ``} ` `                ``} ` `                 `  `                ``if` `((num / j) != j) ` `                ``{ ` `                    ``if``(mpp.ContainsKey(num / j)) ` `                    ``{ ` `                        ``var` `v = mpp[num/j]; ` `                        ``mpp.Remove(num/j); ` `                        ``mpp.Add(num / j, v + 1); ` `                    ``} ` `                    ``else` `                    ``{ ` `                        ``mpp.Add(num / j, 1); ` `                    ``} ` `                ``} ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// find the maximum times ` `    ``// it can divide ` `    ``int` `maxi = 0; ` `    ``foreach``(KeyValuePair<``int``, ``int``> it ``in` `mpp) ` `    ``{ ` `        ``maxi = Math.Max(it.Value, maxi); ` `    ``} ` ` `  `    ``// print all the factors of ` `    ``// numbers which divides the ` `    ``// maximum array elements ` `    ``foreach``(KeyValuePair<``int``, ``int``> it ``in` `mpp) ` `    ``{ ` `        ``if` `(it.Value == maxi) ` `            ``Console.Write(it.Key + ``" "``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``int` `[]a = { 12, 15, 27, 20, 40 }; ` `    ``int` `n = a.Length; ` `    ``printNumbers(a, n); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```5 2 3 4
```

Time Complexity: O(N * sqrt(max(array element))) 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.