文章目录
- 1. 优质数对的总数 II
1. 优质数对的总数 II
题目链接
- 🍎该题涉及的小技巧:🐥
🐧①一次可以统计这个数的== 两个因子==
但是要注意 25 = 5 * 5,这种情况 5 只能统计一次噢🆒
- 解题思路:
🐧① 题目的意思可以转换成求nums1
中有多少个数可以整除nums2 * k
的数;
🐧② 我们先把nums1
的因子都求出来,因为要整除nums2 * k
,nums1
肯定有因子是在nums2
中才能整除
🐧③ 把nums1
的所有因子用哈希表存起来即可;
- 代码实现
class Solution {
public:
long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k) {
unordered_map<int, int> counts;
// 1.先统计 nums1 的因子
for (auto x : nums1)
{
if (x % k != 0)
continue;
for (int d = 1; d * d <= x; d ++)
{
if (x % d != 0)
continue;
counts[d]++;
// 一次统计两个因子 例如: 12 的因子是 2 和 6
if (d * d < x)
{
counts[x / d] ++;
}
}
}
long long ans = 0;
for (int x : nums2)
ans += counts[x * k];
return ans;
}
};