在 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