在 Python 中查找数平方等于两个数的乘积的方法数的程序
假设我们有两个数组nums1和nums2,我们必须按照这两个规则找到形成的三元组(类型1和类型2)-
三元组(i,j,k)如果nums1[i]^2=nums2[j]*nums2[k]其中[0<=i
三元组(i,j,k)如果nums2[i]^2=nums1[j]*nums1[k]其中[0<=i
因此,如果输入类似于nums1=[7,4]nums2=[5,2,8,9],那么输出将为1,因为存在类型为1,(1,1,2),nums1的三元组[1]^2=nums2[1]*nums2[2]=(16=2*8)。
示例
让我们看看以下实现以获得更好的理解-
from collections import Counter
def solve(nums1, nums2):
cnt1 = Counter(nums1)
cnt2 = Counter(nums2)
def triplets(arr1, arr2):
ans = 0
for t, v in arr1.items():
k = arr2.get(t, 0)
tmp = k * (k - 1) //2
sq = t * t
for m in arr2:
if m < t and sq % m == 0:
tmp += arr2.get(m, 0) * arr2.get(sq //米,0)
ans += tmp * v
return ans
return triplets(cnt1, cnt2) + triplets(cnt2, cnt1)
nums1 = [7,4]
nums2 = [5,2,8,9]
print(solve(nums1, nums2))输入
[7,4],[5,2,8,9]输出结果
2