# Common divisors of N numbers

• Difficulty Level : Hard
• Last Updated : 26 Jan, 2022

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:
Explanation:
GCD of all the numbers is 1.
Hence there is only one common divisor of all the numbers i.e., 1.

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 print all 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` `    ``# Print all 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 print all 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`

## Javascript

 ``

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.

Auxiliary Space: O((log(max(a, b)))3/2)

My Personal Notes arrow_drop_up