给定两个长度为N 的数组arr1[]和arr2[] ,它们分别包含N 个分数的分子和分母,任务是计算数组中的分数个数,该数组是一个分数的完美平方。
例子:
Input: arr1[] = {3, 25, 49, 9}, arr2[] = {27, 64, 7, 3}
Output: 2
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
处理方法:按照以下步骤解决问题:
- 初始化一个变量cntPerfNum来存储完全平方分数的计数。
- 遍历数组和每个数组元素,检查(arr1[i] / GCD(arr1[i], arr2[i]) )和(arr2[i] / GCD(arr1[i], arr2[ i]) )是否为完美正方形。如果发现为真,则将 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)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live