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:
- 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[].
- 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 |
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 DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.