Related Articles

Related Articles

Check if product of array containing prime numbers is a perfect square
  • Last Updated : 08 Apr, 2019

Given an array arr[] containing only prime numbers, the task is to check if the product of the array elements is a perfect square or not.

Examples:

Input: arr[] = {2, 2, 7, 7}
Output: Yes
2 * 2 * 7 * 7 = 196 = 142

Input: arr[] = {3, 3, 3, 5, 5}
Output: No

Naive approach: Multiply all the elements of the array and check whether the product is a perfect square or not.



Efficient approach: Count the frequencies of all the elements of the array, if frequency of all the elements are even then the product will be a perfect square else print No.

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 that returns true if
// the product of all the array elements
// is a perfect square
bool isPerfectSquare(int arr[], int n)
{
    unordered_map<int, int> umap;
  
    // Update the frequencies of
    // all the array elements
    for (int i = 0; i < n; i++)
        umap[arr[i]]++;
  
    unordered_map<int, int>::iterator itr;
    for (itr = umap.begin(); itr != umap.end(); itr++)
  
        // If frequency of some element
        // in the array is odd
        if ((itr->second) % 2 == 1)
            return false;
  
    return true;
}
  
// Driver code
int main()
{
    int arr[] = { 2, 2, 7, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    if (isPerfectSquare(arr, n))
        cout << "Yes";
    else
        cout << "No";
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG
{
    // Function that returns true if
    // the product of all the array elements
    // is a perfect square
    static boolean isPerfectSquare(int [] arr, int n)
    {
          
        HashMap<Integer, Integer> umap = new HashMap<>(); 
          
        // Update the frequencies of
        // all the array elements
        for (int i = 0; i < n; i++)
        {
            if(umap.containsKey(arr[i]))
                umap.put(arr[i], umap.get(arr[i]) + 1 );
            else
                umap.put(arr[i], 1);
              
        }
          
        Iterator<Map.Entry<Integer, Integer> > 
                iterator = umap.entrySet().iterator(); 
  
        while(iterator.hasNext())
        {
            Map.Entry<Integer, Integer> entry = iterator.next();
              
            // If frequency of some element
            // in the array is odd
            if (entry.getValue() % 2 == 1)
                return false;
        }
        return true;
    }
      
    // Driver code
    public static void main (String[] args)
    {
  
        int arr [] = { 2, 2, 7, 7 };
        int n = arr.length;
      
        if (isPerfectSquare(arr, n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
  
// This code is contributed by ihritik

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function that returns true if 
# the product of all the array elements 
# is a perfect square 
def isPerfectSquare(arr, n) : 
  
    umap = dict.fromkeys(arr, n); 
  
    # Update the frequencies of 
    # all the array elements 
    for key in arr :
        umap[key] += 1
  
    for key in arr :
  
        # If frequency of some element 
        # in the array is odd 
        if (umap[key] % 2 == 1) :
            return False
  
    return True
  
# Driver code 
if __name__ == "__main__"
  
    arr = [ 2, 2, 7, 7 ]; 
    n = len(arr)
  
    if (isPerfectSquare(arr, n)) :
        print("Yes"); 
    else :
        print("No"); 
  
# This code is contributed by Ryuga

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
using System.Collections.Generic;
  
class GFG
{
    // Function that returns true if
    // the product of all the array elements
    // is a perfect square
    static bool isPerfectSquare(int [] arr, int n)
    {
          
        Dictionary<int, int> umap = new Dictionary<int, int>(); 
          
        // Update the frequencies of
        // all the array elements
        for (int i = 0; i < n; i++)
        {
            if(umap.ContainsKey(arr[i]))
                umap[arr[i]]++;
            else
                umap[arr[i]] = 1;
              
        }
          
        Dictionary<int, int>.ValueCollection valueColl = 
                                                umap.Values; 
        foreach(int val in valueColl) 
        {
            // If frequency of some element
            // in the array is odd
            if (val % 2 == 1)
                return false;
        }
        return true;
    }
      
    // Driver code
    public static void Main () 
    {
  
        int [] arr = { 2, 2, 7, 7 };
        int n = arr.Length;
      
        if (isPerfectSquare(arr, n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
// This code is contributed by ihritik

chevron_right


Output:

Yes

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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :