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

以上是 在 Python 中查找数平方等于两个数的乘积的方法数的程序 的全部内容, 来源链接: utcz.com/z/317278.html

回到顶部