Open In App

Common divisors of N numbers

Last Updated : 26 Jan, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads