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.

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find all common
// divisors of N numbers
#include <bits/stdc++.h>
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[0];
  
    // 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[0]);
  
    // Function to print all the
    // common divisors
    printAllDivisors(arr, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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<Integer> divisors = new HashSet<Integer>();
  
    // 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[0];
  
    // 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

chevron_right


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.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




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.