Check whether the product of every subsequence is a perfect square or not
Last Updated :
01 Nov, 2022
Given an array arr[] consisting of N positive integers, the task is to check if the product of elements of every subsequence of the given array arr[] is a perfect square or not. If found to be true, then print Yes. Otherwise, print No.
Examples:
Input: arr[] = {1, 4, 100}
Output: Yes
Explanation:
Following are the subsequences of the given array arr[]:
- {1}, the product is equal to 1, and is a perfect square.
- {1, 4}, the product is equal to 4, and is a perfect square.
- {1, 100}, the product is equal to 100 and is a perfect square.
- {1, 4, 100}, the product is equal to 400 and is a perfect square.
- {4}, the product is equal to 4 and is a perfect square.
- {4, 100}, the product is equal to 400 and is a perfect square.
- {100}, the product is equal to 100 and is a perfect square.
Therefore, print “Yes”.
Input: arr[] = {1, 3}
Output: No
Naive Approach: The simplest approach to solve the given problem is to generate all possible subsequences of the given array and if the product elements of every subsequence is a perfect square, then print Yes. Otherwise, print No.
Time Complexity: O(N*2N)
Auxiliary Space: O(1)
Efficient Approach: The above approach can also be optimized using the fact that the product of two perfect square numbers will also be a perfect square. Therefore, to check if the individual product of elements of all subsequences is a perfect square or not, the idea is to check if all the array elements are perfect squares or not. If found to be true, then print Yes. Otherwise, print No.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string perfectSquare( int arr[], int N)
{
for ( int i = 0; i < N; i++) {
int p = sqrt (arr[i]);
if (p * p != arr[i]) {
return "No" ;
}
}
return "Yes" ;
}
int main()
{
int arr[] = { 1, 4, 100 };
int N = sizeof (arr) / sizeof (arr[0]);
cout << perfectSquare(arr, N);
return 0;
}
|
Java
import java.io.*;
class GFG{
static String perfectSquare( int arr[], int N)
{
for ( int i = 0 ; i < N; i++)
{
int p = ( int )Math.sqrt(arr[i]);
if (p * p != arr[i])
{
return "No" ;
}
}
return "Yes" ;
}
public static void main (String[] args)
{
int arr[] = { 1 , 4 , 100 };
int N = arr.length;
System.out.println(perfectSquare(arr, N));
}
}
|
Python3
from math import sqrt
def perfectSquare(arr, N):
for i in range (N):
p = sqrt(arr[i])
if (p * p ! = arr[i]):
return "No"
return "Yes"
if __name__ = = '__main__' :
arr = [ 1 , 4 , 100 ]
N = len (arr)
print (perfectSquare(arr, N))
|
C#
using System;
class GFG{
static String perfectSquare( int [] arr, int N)
{
for ( int i = 0; i < N; i++)
{
int p = ( int )Math.Sqrt(arr[i]);
if (p * p != arr[i])
{
return "No" ;
}
}
return "Yes" ;
}
public static void Main()
{
int [] arr = { 1, 4, 100 };
int N = arr.Length;
Console.WriteLine(perfectSquare(arr, N));
}
}
|
Javascript
<script>
function perfectSquare(arr, N)
{
for (let i = 0; i < N; i++)
{
let p = Math.sqrt(arr[i]);
if (p * p != arr[i])
{
return "No" ;
}
}
return "Yes" ;
}
let arr = [ 1, 4, 100 ];
let N = arr.length;
document.write(perfectSquare(arr, N));
</script>
|
Time Complexity: O(N*log(Ai)) where N is the size of the array.
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...