Related Articles
Common divisors of N numbers
• Difficulty Level : Hard
• Last Updated : 23 Mar, 2020

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
Recommended Articles
Page :