Related Articles

# Count perfect square fractions from given array

• Last Updated : 20 Apr, 2021

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 ``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<

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

 ``
Output:
`2`

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

Attention reader! Don’t stop learning now. Join the First-Step-to-DSA Course for Class 9 to 12 students , specifically designed to introduce data structures and algorithms to the class 9 to 12 students

My Personal Notes arrow_drop_up