Related Articles

# Common divisors of N numbers

• Difficulty Level : Hard
• Last Updated : 14 Jun, 2021

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 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`

## 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.

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up