Find if it is possible to make all elements of an array equal by the given operations
Given an array arr[], the task is to make all the array elements equal with the given operation.
In a single operation, any element of the array can be either multiplied by 3 or by 5 any number of times. If it’s possible to make all the array elements equal with the given operation then print Yes else print No.
Examples:
Input: arr[] = {18, 30, 54, 90, 162}
Output: Yes
Explanation:
We can perform following operations:
162 X 5 = 810
90 X 3 X 3 = 810
54 X 5 X 3 = 810
30 X 3 X 3 X 3 = 810
18 X 5 X 3 X 3 = 810
Input: arr[] = {18, 36, 58, 90, 162}
Output: No
Explanation:
There is no way you can make all elements equal.
Observations:
- If after some operations, all the numbers become equal then they will have the same Prime factorization i.e each number will have the same power of 2, 3, 5…and so on.
- Since we are multiplying the numbers only by 3 and 5 which are Prime Numbers so we can make powers of 3 and 5 in the prime factorization of all numbers equal after some operations.
- Therefore, for all numbers to be made equal, the powers of Prime Numbers in the prime factorization other than 3 and 5 must be equal.
- The solution would be to take each number and remove all powers of 3 and 5 from it. If then all numbers turn out to be equal then it’s possible to make array elements equal by using the given operations otherwise it’s not possible.
Steps:
- Divide each element of array arr[] with 3 and 5 such that all the power of 3 and 5 in Prime Factorization of each element becomes zero.
- Check if all the element of the array are equal or not. If yes then print Yes.
- Else print No.
Below is the implementation of the above approach:
CPP
// C++ implementation to find if it's // possible to make all elements of an // array equal by using two operations. #include <bits/stdc++.h> using namespace std; // Function to find if it's possible // to make all array elements equal bool canMakeEqual( int a[], int n) { // Iterate over all numbers for ( int i = 0; i < n; i++) { // If a number has a power of 5 // remove it while (a[i] % 5 == 0) { a[i] /= 5; } // If a number has a power of 3 // remove it while (a[i] % 3 == 0) { a[i] /= 3; } } int last = a[0]; // Check if all elements are equal // in the final array for ( int i = 1; i < n; i++) { if (a[i] != last) { return false ; } } return true ; } // Driver's Code int main() { int arr[] = { 18, 30, 54, 90, 162 }; int n = sizeof (arr) / sizeof (arr[0]); // Function call to check if all // element in the array can be equal // or not. if (canMakeEqual(arr, n)) { cout << "YES" << endl; } else { cout << "NO" << endl; } return 0; } |
Java
// Java implementation to find if it's // possible to make all elements of an // array equal by using two operations. class GFG{ // Function to find if it's possible // to make all array elements equal static boolean canMakeEqual( int a[], int n) { // Iterate over all numbers for ( int i = 0 ; i < n; i++) { // If a number has a power of 5 // remove it while (a[i] % 5 == 0 ) { a[i] /= 5 ; } // If a number has a power of 3 // remove it while (a[i] % 3 == 0 ) { a[i] /= 3 ; } } int last = a[ 0 ]; // Check if all elements are equal // in the final array for ( int i = 1 ; i < n; i++) { if (a[i] != last) { return false ; } } return true ; } // Driver's Code public static void main(String[] args) { int arr[] = { 18 , 30 , 54 , 90 , 162 }; int n = arr.length; // Function call to check if all // element in the array can be equal // or not. if (canMakeEqual(arr, n)) { System.out.print( "YES" + "\n" ); } else { System.out.print( "NO" + "\n" ); } } } // This code is contributed by PrinciRaj1992 |
Python3
# Python3 implementation to find if it's # possible to make all elements of an # array equal by using two operations. # Function to find if it's possible # to make all array elements equal def canMakeEqual( a, n) : # Iterate over all numbers for i in range (n) : # If a number has a power of 5 # remove it while (a[i] % 5 = = 0 ) : a[i] / / = 5 ; # If a number has a power of 3 # remove it while (a[i] % 3 = = 0 ) : a[i] / / = 3 ; last = a[ 0 ]; # Check if all elements are equal # in the final array for i in range ( 1 ,n) : if (a[i] ! = last) : return False ; return True ; # Driver's Code if __name__ = = "__main__" : arr = [ 18 , 30 , 54 , 90 , 162 ]; n = len (arr); # Function call to check if all # element in the array can be equal # or not. if (canMakeEqual(arr, n)) : print ( "YES" ); else : print ( "NO" ); # This code is contributed by AnkitRai01 |
C#
// C# implementation to find if it's // possible to make all elements of an // array equal by using two operations. using System; class GFG{ // Function to find if it's possible // to make all array elements equal static bool canMakeEqual( int []a, int n) { // Iterate over all numbers for ( int i = 0; i < n; i++) { // If a number has a power of 5 // remove it while (a[i] % 5 == 0) { a[i] /= 5; } // If a number has a power of 3 // remove it while (a[i] % 3 == 0) { a[i] /= 3; } } int last = a[0]; // Check if all elements are equal // in the final array for ( int i = 1; i < n; i++) { if (a[i] != last) { return false ; } } return true ; } // Driver's Code public static void Main( string [] args) { int []arr = { 18, 30, 54, 90, 162 }; int n = arr.Length; // Function call to check if all // element in the array can be equal // or not. if (canMakeEqual(arr, n)) { Console.WriteLine( "YES" ); } else { Console.WriteLine( "NO" ); } } } // This code is contributed by AnkitRai01 |
Javascript
<script> // javascript implementation to find if it's // possible to make all elements of an // array equal by using two operations. // Function to find if it's possible // to make all array elements equal function canMakeEqual(a , n) { // Iterate over all numbers for (i = 0; i < n; i++) { // If a number has a power of 5 // remove it while (a[i] % 5 == 0) { a[i] /= 5; } // If a number has a power of 3 // remove it while (a[i] % 3 == 0) { a[i] /= 3; } } var last = a[0]; // Check if all elements are equal // in the final array for (i = 1; i < n; i++) { if (a[i] != last) { return false ; } } return true ; } // Driver's Code var arr = [ 18, 30, 54, 90, 162 ]; var n = arr.length; // Function call to check if all // element in the array can be equal // or not. if (canMakeEqual(arr, n)) { document.write( "YES" + "\n" ); } else { document.write( "NO" + "\n" ); } // This code contributed by umadevi9616 </script> |
YES
Time Complexity: O(N), where N is the size of array.
Space Complexity: O(1)
Please Login to comment...