# Common divisors of N numbers

Given an array arr[] of N integers. The task is to find all the common divisors of all N integers.

Examples

Input: arr[] = {6, 90, 12, 18, 30, 18}
Output: 1 2 3 6
Explanation:
GCD of all the numbers is 6.
Now to find all the divisors of 6, we have
6 = 1 * 6
6 = 2 * 3
Hence 1, 2, 3 and 6 the common divisors of {6, 90, 12, 18, 20, 18}.

Input: arr[] = {1, 2, 3, 4, 5}
Output: 1
Explanation:
GCD of all the numbers is 1.
Hence there is only one common divisor of all the numbers i.e., 1.

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

Approach:

1. To find the common divisors of all the N integers in the given array arr[] find the greatest common divisors (gcd) of all the integers in arr[].
2. Find all the divisors of greatest common divisors (gcd) obtained in the above step using the approach discussed in this article.

Below is the implementation of the above approach:

## C++

 `// C++ program to find all common ` `// divisors of N numbers ` `#include ` `using` `namespace` `std; ` ` `  `// Function to calculate gcd of ` `// two numbers ` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(a == 0) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Function to print all the ` `// common divisors ` `void` `printAllDivisors(``int` `arr[], ``int` `N) ` `{ ` `    ``// Variable to find the gcd ` `    ``// of N numbers ` `    ``int` `g = arr; ` ` `  `    ``// Set to store all the ` `    ``// common divisors ` `    ``set<``int``> divisors; ` ` `  `    ``// Finding GCD of the given ` `    ``// N numbers ` `    ``for` `(``int` `i = 1; i < N; i++) { ` `        ``g = gcd(arr[i], g); ` `    ``} ` ` `  `    ``// Finding divisors of the ` `    ``// HCF of n numbers ` `    ``for` `(``int` `i = 1; i * i <= g; i++) { ` `        ``if` `(g % i == 0) { ` `            ``divisors.insert(i); ` `            ``if` `(g / i != i) ` `                ``divisors.insert(g / i); ` `        ``} ` `    ``} ` ` `  `    ``// Print all the divisors ` `    ``for` `(``auto``& it : divisors) ` `        ``cout << it << ``" "``; ` `} ` ` `  `// Driver's Code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 6, 90, 12, 18, 30, 24 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` ` `  `    ``// Function to print all the ` `    ``// common divisors ` `    ``printAllDivisors(arr, n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find all common ` `// divisors of N numbers ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to calculate gcd of ` `// two numbers ` `static` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(a == ``0``) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Function to print all the ` `// common divisors ` `static` `void` `printAllDivisors(``int` `arr[], ``int` `N) ` `{ ` `    ``// Variable to find the gcd ` `    ``// of N numbers ` `    ``int` `g = arr[``0``]; ` ` `  `    ``// Set to store all the ` `    ``// common divisors ` `    ``HashSet divisors = ``new` `HashSet(); ` ` `  `    ``// Finding GCD of the given ` `    ``// N numbers ` `    ``for` `(``int` `i = ``1``; i < N; i++)  ` `    ``{ ` `        ``g = gcd(arr[i], g); ` `    ``} ` ` `  `    ``// Finding divisors of the ` `    ``// HCF of n numbers ` `    ``for` `(``int` `i = ``1``; i * i <= g; i++) ` `    ``{ ` `        ``if` `(g % i == ``0``)  ` `        ``{ ` `            ``divisors.add(i); ` `            ``if` `(g / i != i) ` `                ``divisors.add(g / i); ` `        ``} ` `    ``} ` ` `  `    ``// Print all the divisors ` `    ``for` `(``int` `it : divisors) ` `        ``System.out.print(it+ ``" "``); ` `} ` ` `  `// Driver's Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `arr[] = { ``6``, ``90``, ``12``, ``18``, ``30``, ``24` `}; ` `    ``int` `n = arr.length; ` ` `  `    ``// Function to print all the ` `    ``// common divisors ` `    ``printAllDivisors(arr, n); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

## Python3

 `# Python3 program to find all common ` `# divisors of N numbers ` ` `  `# Function to calculate gcd of ` `# two numbers ` `def` `gcd(a, b): ` `    ``if` `(a ``=``=` `0``): ` `        ``return` `b ` `    ``return` `gcd(b ``%` `a, a) ` ` `  `# Function to prall the ` `# common divisors ` `def` `printAllDivisors(arr, N): ` `     `  `    ``# Variable to find the gcd ` `    ``# of N numbers ` `    ``g ``=` `arr[``0``] ` ` `  `    ``# Set to store all the ` `    ``# common divisors ` `    ``divisors ``=` `dict``() ` ` `  `    ``# Finding GCD of the given ` `    ``# N numbers ` `    ``for` `i ``in` `range``(``1``, N): ` `        ``g ``=` `gcd(arr[i], g) ` ` `  `    ``# Finding divisors of the ` `    ``# HCF of n numbers ` `    ``for` `i ``in` `range``(``1``, g ``+` `1``): ` `        ``if` `i``*``i > g: ` `            ``break` `        ``if` `(g ``%` `i ``=``=` `0``): ` `            ``divisors[i] ``=` `1` `            ``if` `(g ``/``/` `i !``=` `i): ` `                ``divisors[g ``/``/` `i] ``=` `1` ` `  `    ``# Prall the divisors ` `    ``for` `it ``in` `sorted``(divisors): ` `        ``print``(it, end``=``" "``) ` ` `  `# Driver's Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr``=` `[``6``, ``90``, ``12``, ``18``, ``30``, ``24``] ` `    ``n ``=` `len``(arr) ` ` `  `    ``# Function to prall the ` `    ``# common divisors ` `    ``printAllDivisors(arr, n) ` ` `  `# This code is contributed by mohit kumar 29 `

## C#

 `// C# program to find all common ` `// divisors of N numbers ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to calculate gcd of ` `// two numbers ` `static` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(a == 0) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Function to print all the ` `// common divisors ` `static` `void` `printAllDivisors(``int` `[]arr, ``int` `N) ` `{ ` `    ``// Variable to find the gcd ` `    ``// of N numbers ` `    ``int` `g = arr; ` ` `  `    ``// Set to store all the ` `    ``// common divisors ` `    ``HashSet<``int``> divisors = ``new` `HashSet<``int``>(); ` ` `  `    ``// Finding GCD of the given ` `    ``// N numbers ` `    ``for` `(``int` `i = 1; i < N; i++)  ` `    ``{ ` `        ``g = gcd(arr[i], g); ` `    ``} ` ` `  `    ``// Finding divisors of the ` `    ``// HCF of n numbers ` `    ``for` `(``int` `i = 1; i * i <= g; i++) ` `    ``{ ` `        ``if` `(g % i == 0)  ` `        ``{ ` `            ``divisors.Add(i); ` `            ``if` `(g / i != i) ` `                ``divisors.Add(g / i); ` `        ``} ` `    ``} ` ` `  `    ``// Print all the divisors ` `    ``foreach` `(``int` `it ``in` `divisors) ` `        ``Console.Write(it+ ``" "``); ` `} ` ` `  `// Driver's Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `[]arr = { 6, 90, 12, 18, 30, 24 }; ` `    ``int` `n = arr.Length; ` ` `  `    ``// Function to print all the ` `    ``// common divisors ` `    ``printAllDivisors(arr, n); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

Output:

```1 2 3 6
```

Time Complexity: O(N*log(M)) where N is the length of the given array and M is the maximum element 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.

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.

Article Tags :
Practice Tags :

1

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