在 Python 中查找数平方等于两个数的乘积的方法数的程序
假设我们有两个数组 nums1 和 nums2,我们必须按照这两个规则找到形成的三元组(类型 1 和类型 2) -
三元组 (i, j, k) 如果 nums1[i]^2 = nums2[j] * nums2[k] 其中 [0 <= i < nums1 的大小和 0 <= j < k < nums2 的大小]。
三元组 (i, j, k) 如果 nums2[i]^2 = nums1[j] * nums1[k] 其中 [0 <= i < nums2 的大小和 0 <= j < k < nums1 的大小]。
因此,如果输入类似于 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 Counterdef 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
以上是 在 Python 中查找数平方等于两个数的乘积的方法数的程序 的全部内容, 来源链接: utcz.com/z/317278.html