Open In App

Count perfect square fractions from given array

Last Updated : 28 Oct, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given two arrays arr1[] and arr2[] of length N which contains Numerator and Denominator of N fractions respectively, the task is to count the number of fractions from the array which is a perfect square of a fraction.

Examples:

Input: arr1[] = {3, 25, 49, 9}, arr2[] = {27, 64, 7, 3} 
Output:
Explanation: 
(arr1[0] / arr2[0]) = (3 / 27) = (1 / 9) = (1 / 3)2 
(arr1[1] / arr2[1]) = (25 / 64) = (5 / 8) 2 
(arr1[0] / arr2[0]) and (arr1[1] / arr2[1]) are perfect square fractions. Therefore, the required output is 2.

Input: arr1[] = {1, 11, 3, 9}, arr2[] = {9, 11, 5, 1} 
Output: 3

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ implementation of the
// above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the GCD
// of two numbers
int GCD(int a,int b)
{
    // If b is 0
    if (b ==0 ) {
      return a;
    }
    return GCD(b,a%b);
}
 
// Function to check if N
// is perfect square
bool isPerfectSq(int N)
{
   // Stores square root
   // of N
   int x = sqrt(N);
    
   // Check if N is a
   // perfect square
   if (x * x == N) {
       return 1;
   }
    
   return 0;
}
 
// Function to count perfect square fractions
int cntPerSquNum(int arr1[], int arr2[],
                                  int N)
{
    // Stores count of perfect square
    // fractions in both arrays
    int cntPerfNum = 0;
     
    // Traverse both the arrays
    for (int i = 0; i < N; i++) {
         
        // Stores gcd of (arr1[i], arr2[i])
        int gcd = GCD(arr1[i], arr2[i]);
         
        // If numerator and denomerator of a
        // reduced fraction is a perfect square
        if (isPerfectSq(arr1[i]/ gcd) &&
           isPerfectSq(arr2[i]/ gcd)) {
                
            // Update cntPerfNum
            cntPerfNum++;      
        }
         
    }
     
    return cntPerfNum;
}
 
 
//Driver Code
int main() {
 
    int arr1[]={ 3, 25, 49, 9 };
    int arr2[]={ 27, 64, 7, 3 };
   
    int N = sizeof(arr1) / sizeof(arr1[0]);
   
    cout<<cntPerSquNum(arr1, arr2, N);
}


Java




// Java implementation of the
// above approach
import java.lang.Math;
 
class GFG{
     
// Function to find the GCD
// of two numbers
public static int GCD(int a, int b)
{
     
    // If b is 0
    if (b == 0)
    {
      return a;
    }
    return GCD(b, a % b);
}
   
// Function to check if N
// is perfect square
public static boolean isPerfectSq(int N)
{
     
    // Stores square root
    // of N 
    int x = (int)Math.sqrt(N);
     
    // Check if N is a 
    // perfect square
    if (x * x == N)
    {
        return true;
    }
     
    return false;
}
   
// Function to count perfect square fractions
public static int cntPerSquNum(int arr1[],
                               int arr2[], 
                               int N)
{
     
    // Stores count of perfect square
    // fractions in both arrays
    int cntPerfNum = 0;
       
    // Traverse both the arrays
    for(int i = 0; i < N; i++)
    {
         
        // Stores gcd of (arr1[i], arr2[i])
        int gcd = GCD(arr1[i], arr2[i]);
           
        // If numerator and denomerator of a
        // reduced fraction is a perfect square
        if (isPerfectSq(arr1[i] / gcd) &&
            isPerfectSq(arr2[i] / gcd))
        {
             
            // Update cntPerfNum
            cntPerfNum++;       
        }
    }
       
    return cntPerfNum;
}
 
// Driver code
public static void main(String[] args)
{
    int arr1[] = { 3, 25, 49, 9 };
    int arr2[] = { 27, 64, 7, 3 };
     
    int N = arr1.length;
     
    System.out.println(cntPerSquNum(arr1, arr2, N));
}
}
 
// This code is contributed by divyeshrabadiya07


Python3




# Python3 implementation of the
# above approach
 
# Function to find the GCD
# of two numbers
def GCD(a, b):
     
    # If b is 0
    if (b == 0):
        return a
         
    return GCD(b, a % b)
 
# Function to check if N
# is perfect square
def isPerfectSq(N):
 
    # Stores square root
    # of N
    x = (int)(pow(N, 1 / 2))
     
    # Check if N is a
    # perfect square
    if (x * x == N):
        return True
         
    return False
 
# Function to count perfect square
# fractions
def cntPerSquNum(arr1, arr2, N):
     
    # Stores count of perfect square
    # fractions in both arrays
    cntPerfNum = 0
     
    # Traverse both the arrays
    for i in range(N):
 
        # Stores gcd of (arr1[i], arr2[i])
        gcd = GCD(arr1[i], arr2[i])
 
        # If numerator and denomerator of a
        # reduced fraction is a perfect square
        if (isPerfectSq(arr1[i] / gcd) and
            isPerfectSq(arr2[i] / gcd)):
                 
            # Update cntPerfNum
            cntPerfNum += 1
 
    return cntPerfNum
 
# Driver code
if __name__ == '__main__':
     
    arr1 = [ 3, 25, 49, 9 ]
    arr2 = [ 27, 64, 7, 3 ]
 
    N = len(arr1)
 
    print(cntPerSquNum(arr1, arr2, N))
 
# This code is contributed by Princi Singh


C#




// C# implementation of the
// above approach
using System;
class GFG{
     
// Function to find the GCD
// of two numbers
public static int GCD(int a,
                      int b)
{    
  // If b is 0
  if (b == 0)
  {
    return a;
  }
  return GCD(b, a % b);
}
 
// Function to check if N
// is perfect square
public static bool isPerfectSq(int N)
{
  // Stores square root
  // of N 
  int x = (int)Math.Sqrt(N);
 
  // Check if N is a 
  // perfect square
  if (x * x == N)
  {
    return true;
  }
 
  return false;
}
   
// Function to count perfect
// square fractions
public static int cntPerSquNum(int []arr1,
                               int []arr2, 
                               int N)
{    
  // Stores count of perfect square
  // fractions in both arrays
  int cntPerfNum = 0;
 
  // Traverse both the arrays
  for(int i = 0; i < N; i++)
  {
    // Stores gcd of (arr1[i], arr2[i])
    int gcd = GCD(arr1[i], arr2[i]);
 
    // If numerator and denomerator
    // of a reduced fraction is a
    // perfect square
    if (isPerfectSq(arr1[i] / gcd) &&
        isPerfectSq(arr2[i] / gcd))
    {
      // Update cntPerfNum
      cntPerfNum++;       
    }
  }
 
  return cntPerfNum;
}
 
// Driver code
public static void Main(String[] args)
{
  int []arr1 = {3, 25, 49, 9};
  int []arr2 = {27, 64, 7, 3};
  int N = arr1.Length;
  Console.WriteLine(cntPerSquNum(arr1,
                                 arr2, N));
}
}
 
// This code is contributed by shikhasingrajput


Javascript




<script>
 
// Function to find the GCD
// of two numbers
function GCD(a,b)
{
    // If b is 0
    if (b ==0 ) {
      return a;
    }
    return GCD(b,a%b);
}
 
// Function to check if N
// is perfect square
function isPerfectSq( N)
{
   // Stores square root
   // of N
  var x = Math.sqrt(N);
    
   // Check if N is a
   // perfect square
   if (x * x == N) {
       return 1;
   }
    
   return 0;
}
 
// Function to count perfect square fractions
function cntPerSquNum(arr1,arr2,N)
{
 
    // Stores count of perfect square
    // fractions in both arrays
    var cntPerfNum = 0;
     
    // Traverse both the arrays
    for (var i = 0; i < N; i++) {
         
        // Stores gcd of (arr1[i], arr2[i])
        var gcd = GCD(arr1[i], arr2[i]);
         
        // If numerator and denomerator of a
        // reduced fraction is a perfect square
        if (isPerfectSq(arr1[i]/ gcd) &&
           isPerfectSq(arr2[i]/ gcd)) {
                
            // Update cntPerfNum
            cntPerfNum++;      
        }
         
    }   
    return cntPerfNum;
}
 
var arr1 = [ 3, 25, 49, 9 ];
    var arr2 = [ 27, 64, 7, 3 ]; 
    var N = 4;
    document.write(cntPerSquNum(arr1, arr2, N));
 
// This code is contributed by akshitsaxenaa09.
</script>


Output: 

2

 

Time Complexity: O(N * log(M)), where M is the maximum element from both the arrays. 
Auxiliary Space: O(1)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads