Count of integers that divide all the elements of the given array

Given an array arr[] of N elements. The task is to find the count of positive integers that divide all the array elements.

Examples:

Input: arr[] = {2, 8, 10, 6}
Output: 2
1 and 2 are the only integers that divide
all the elements of the given array.

Input:arr[] = {6, 12, 18, 12, 6}
Output: 4

Approach: We know that the maximum integer that will divide all the array elements will be the gcd of the array and all the other integers that will divide all the elements of the array will have to be the factors of this gcd. Hence, the count of valid integers will be equal to the count of factors of the gcd of all the array elements.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the count of 
// the required integers
int getCount(int a[], int n)
{
  
    // To store the gcd of the array elements
    int gcd = 0;
    for (int i = 0; i < n; i++)
        gcd = __gcd(gcd, a[i]);
  
    // To store the count of factors
    // of the found gcd
    int cnt = 0;
  
    for (int i = 1; i * i <= gcd; i++) {
        if (gcd % i == 0) {
  
            // If g is a perfect square
            if (i * i == gcd)
                cnt++;
  
            // Factors appear in pairs
            else
                cnt += 2;
        }
    }
  
    return cnt;
}
  
// Driver code
int main()
{
    int a[] = { 4, 16, 1024, 48 };
    int n = sizeof(a) / sizeof(a[0]);
  
    cout << getCount(a, n);
  
    return 0;
}

chevron_right


Java

// Java implementation of the approach
class GFG
{

// Recursive function to return gcd
static int calgcd(int a, int b)
{
if (b == 0)
return a;
return calgcd(b, a % b);
}

// Function to return the count of
// the required integers
static int getCount(int [] a, int n)
{

// To store the gcd of the array elements
int gcd = 0;
for (int i = 0; i < n; i++) gcd = calgcd(gcd, a[i]); // To store the count of factors // of the found gcd int cnt = 0; for (int i = 1; i * i <= gcd; i++) { if (gcd % i == 0) { // If g is a perfect square if (i * i == gcd) cnt++; // Factors appear in pairs else cnt += 2; } } return cnt; } // Driver code public static void main (String[] args) { int [] a = { 4, 16, 1024, 48 }; int n = a.length; System.out.println(getCount(a, n)); } } // This code is contributed by ihritik [tabby title="Python3"]

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function to return the count of
# the required integers
from math import gcd as __gcd
def getCount(a, n):
  
    # To store the gcd of the array elements
    gcd = 0
    for i in range(n):
        gcd = __gcd(gcd, a[i])
  
    # To store the count of factors
    # of the found gcd
    cnt = 0
  
    for i in range(1, gcd + 1):
        if i * i > gcd:
            break
        if (gcd % i == 0):
  
            # If g is a perfect square
            if (i * i == gcd):
                cnt += 1
  
            # Factors appear in pairs
            else:
                cnt += 2
  
    return cnt
  
# Driver code
a = [4, 16, 1024, 48]
n = len(a)
  
print(getCount(a, n))
  
# This code is contributed by Mohit Kumar

chevron_right


C#

// C# implementation of the approach
using System;

class GFG
{

// Recursive function to return gcd
static int calgcd(int a, int b)
{
if (b == 0)
return a;
return calgcd(b, a % b);
}

// Function to return the count of
// the required integers
static int getCount(int [] a, int n)
{

// To store the gcd of the array elements
int gcd = 0;
for (int i = 0; i < n; i++) gcd = calgcd(gcd, a[i]); // To store the count of factors // of the found gcd int cnt = 0; for (int i = 1; i * i <= gcd; i++) { if (gcd % i == 0) { // If g is a perfect square if (i * i == gcd) cnt++; // Factors appear in pairs else cnt += 2; } } return cnt; } // Driver code public static void Main () { int [] a = { 4, 16, 1024, 48 }; int n = a.Length; Console.WriteLine(getCount(a, n)); } } // This code is contributed by ihritik [tabbyending]

Output:

3


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.



Improved By : mohit kumar 29, ihritik