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++ 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 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 |
# 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# 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 |
<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> |
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))