📜  计算给定数组中的完美平方分数

📅  最后修改于: 2021-05-17 18:48:07             🧑  作者: Mango

给定两个长度为N的数组arr1 []arr2 [] ,分别包含N个分数的分子和分母,任务是计算数组中分数的分数,分数是分数的理想平方。

例子:

方法:请按照以下步骤解决问题:

  • 初始化变量cntPerfNum来存储完美平方分数的计数。
  • 遍历数组和每个数组元素,检查(arr1 [i] / GCD(arr1 [i],arr2 [i]) )(arr2 [i] / GCD(arr1 [i],arr2 [ i]) )是不是一个完美的正方形。如果发现为true,则将cntPerfNum的值增加1
  • 最后,打印cntPerfNum的值。

下面是上述方法的实现:

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


输出:
2

时间复杂度: O(N * log(M)),其中M是两个数组中的最大元素。
辅助空间: O(1)