Open In App
Related Articles

Check if the given array contains all the divisors of some integer

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

Given an integer array arr[], the task is to check if that array contains all the divisor of some integer.
Examples: 
 

Input: arr[] = { 2, 3, 1, 6} 
Output: Yes 
The array contains all the divisors of 6
Input: arr[] = { 12, 2, 5, 3, 6, 4, 1} 
Output: No 
 


 


Approach: If the array contains all the divisors of a particular integer say X then the maximum element in the array arr[] is the integer X. Now, find the maximum element of the array arr[] and calculate all of its divisors and store it in a vector b. If array arr[] and vector b are equal then the array contains all the divisors of a particular integer, otherwise no.
Below is the implementation of the above approach: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns true if arr[]
// contains all the divisors of some integer
bool checkDivisors(int a[], int n)
{
 
    // Maximum element from the array
    int X = *max_element(a, a + n);
 
    // Vector to store divisors
    // of the maximum element i.e. X
    vector<int> b;
 
    // Store all the divisors of X
    for (int i = 1; i * i <= X; i++) {
        if (X % i == 0) {
            b.push_back(i);
            if (X / i != i)
                b.push_back(X / i);
        }
    }
 
    // If the lengths of a[]
    // and b are different
    // return false
    if (b.size() != n)
        return false;
 
    // Sort a[] and b
    sort(a, a + n);
    sort(b.begin(), b.end());
 
    for (int i = 0; i < n; i++) {
 
        // If divisors are not
        // equal return false
        if (b[i] != a[i])
            return false;
    }
 
    return true;
}
 
// Driver code
int main()
{
    int arr[] = { 8, 1, 2, 12, 48,
                  6, 4, 24, 16, 3 };
 
    int N = sizeof(arr) / sizeof(arr[0]);
 
    if (checkDivisors(arr, N))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

                    

Java

// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// returns th maximum element of the array
static int max_element(int a[] )
{
    int m = a[0];
    for(int i = 0; i < a.length; i++)
    m = Math.max(a[i], m);
    return m;
}
 
// Function that returns true if arr[]
// contains all the divisors of some integer
static boolean checkDivisors(int a[], int n)
{
 
    // Maximum element from the array
    int X = max_element(a);
 
    // Vector to store divisors
    // of the maximum element i.e. X
    Vector<Integer> b=new Vector<Integer>();
 
    // Store all the divisors of X
    for (int i = 1; i * i <= X; i++)
    {
        if (X % i == 0)
        {
            b.add(i);
            if (X / i != i)
                b.add(X / i);
        }
    }
 
    // If the lengths of a[]
    // and b are different
    // return false
    if (b.size() != n)
        return false;
 
    // Sort a[] and b
    Arrays.sort(a);
    Collections.sort(b);
 
    for (int i = 0; i < n; i++)
    {
 
        // If divisors are not
        // equal return false
        if (b.get(i) != a[i])
            return false;
    }
 
    return true;
}
 
// Driver code
public static void main(String args[])
{
    int arr[] = { 8, 1, 2, 12, 48,
                6, 4, 24, 16, 3 };
 
    int N = arr.length;
 
    if (checkDivisors(arr, N))
        System.out.println("Yes");
    else
        System.out.println("No");
 
}
}
 
// This code is contributed by Arnab Kundu

                    

Python3

# Python 3 implementation of the approach
from math import sqrt
 
# Function that returns true if arr[]
# contains all the divisors of some integer
def checkDivisors(a,n):
    # Maximum element from the array
    X = max(a)
 
    # Vector to store divisors
    # of the maximum element i.e. X
    b = []
 
    # Store all the divisors of X
    for i in range(1,int(sqrt(X))+1):
        if (X % i == 0):
            b.append(i)
            if (X // i != i):
                b.append(X // i)
 
    # If the lengths of a[]
    # and b are different
    # return false
    if (len(b) != n):
        return False
 
    # Sort a[] and b
    a.sort(reverse = False)
    b.sort(reverse = False)
 
    for i in range(n):
        # If divisors are not
        # equal return false
        if (b[i] != a[i]):
            return False
    return True
 
# Driver code
if __name__ == '__main__':
    arr = [8, 1, 2, 12, 48,6, 4, 24, 16, 3]
 
    N = len(arr)
 
    if (checkDivisors(arr, N)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by
# Surendra_Gangwar

                    

C#

// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// returns th maximum element of the array
static int max_element(int []a )
{
    int m = a[0];
    for(int i = 0; i < a.Length; i++)
    m = Math.Max(a[i], m);
    return m;
}
 
// Function that returns true if arr[]
// contains all the divisors of some integer
static bool checkDivisors(int []a, int n)
{
 
    // Maximum element from the array
    int X = max_element(a);
 
    // Vector to store divisors
    // of the maximum element i.e. X
    List<int> b = new List<int>();
 
    // Store all the divisors of X
    for (int i = 1; i * i <= X; i++)
    {
        if (X % i == 0)
        {
            b.Add(i);
            if (X / i != i)
                b.Add(X / i);
        }
    }
 
    // If the lengths of a[]
    // and b are different
    // return false
    if (b.Count != n)
        return false;
 
    // Sort a[] and b
    Array.Sort(a);
    b.Sort();
 
    for (int i = 0; i < n; i++)
    {
 
        // If divisors are not
        // equal return false
        if (b[i] != a[i])
            return false;
    }
 
    return true;
}
 
// Driver code
public static void Main(String []args)
{
    int []arr = { 8, 1, 2, 12, 48,
                6, 4, 24, 16, 3 };
 
    int N = arr.Length;
 
    if (checkDivisors(arr, N))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
 
}
}
 
// This code is contributed by Princi Singh

                    

Javascript

<script>
// Javascript implementation of the approach
 
// Function that returns true if arr[]
// contains all the divisors of some integer
function checkDivisors(a, n)
{
 
    // Maximum element from the array
    let X = Math.max(...a);
 
    // Vector to store divisors
    // of the maximum element i.e. X
    let b = [];
 
    // Store all the divisors of X
    for (let i = 1; i * i <= X; i++) {
        if (X % i == 0) {
            b.push(i);
            if (parseInt(X / i) != i)
                b.push(parseInt(X / i));
        }
    }
 
    // If the lengths of a[]
    // and b are different
    // return false
    if (b.length != n)
        return false;
 
    // Sort a[] and b
    a.sort((x,y) => x - y);
    b.sort((x,y) => x - y);
 
    for (let i = 0; i < n; i++) {
 
        // If divisors are not
        // equal return false
        if (b[i] != a[i])
            return false;
    }
 
    return true;
}
 
// Driver code
    let arr = [ 8, 1, 2, 12, 48,
                  6, 4, 24, 16, 3 ];
 
    let N = arr.length;
 
    if (checkDivisors(arr, N))
        document.write("Yes");
    else
        document.write("No");
 
</script>

                    

Output: 
Yes

 

Time Complexity: O((n * log n) + max(arr)), where max(arr) is the largest element of the array arr.

Auxiliary Space: O(max(arr))



Last Updated : 30 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads