Skip to content
Related Articles

Related Articles

Improve Article

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 <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;
}

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

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

Javascript




<script>
// Javascript program to find all common
// divisors of N numbers
 
// Function to calculate gcd of
// two numbers
function gcd(a,b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
 
// Function to print all the
// common divisors
function printAllDivisors(arr, N)
{
 
    // Variable to find the gcd
    // of N numbers
    let g = arr[0];
   
    // Set to store all the
    // common divisors
    let divisors = new Set();
   
    // Finding GCD of the given
    // N numbers
    for (let i = 1; i < N; i++)
    {
        g = gcd(arr[i], g);
    }
   
    // Finding divisors of the
    // HCF of n numbers
    for (let i = 1; i * i <= g; i++)
    {
        if (g % i == 0)
        {
            divisors.add(i);
            if (Math.floor(g / i) != i)
                divisors.add(Math.floor(g / i));
        }
    }
   
    // Print all the divisors
    for (let it of divisors.values())
        document.write(it+ " ");
}
 
// Driver's Code
let arr=[6, 90, 12, 18, 30, 24];
let n = arr.length;
 
// Function to print all the
// common divisors
printAllDivisors(arr, n);
 
// This code is contributed by unknown2108
</script>
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
Recommended Articles
Page :