前言:老是忘记怎么快速筛选因数,我们只需要枚举小于sqrt( num ) 的数,这样可以降低很多复杂度,而且我们的因数一定是成对出现的,所以我们遇到一个因数的时候x,判断 x 2 x^2 x2 是否 < n u m < num <num ,是的话我们就可以知道 n u m / x num /x num/x 也是一个因数(这样可以保证我们不会重复统计
题目地址
class Solution {
public:
long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k) {
int n = nums1.size(), m = nums2.size();
map<int,long long> mp;
for(auto u:nums1){
if(u%k) continue;
u /= k;
for(int j=1;j<=sqrt(u);j++){
if(u%j) continue;
mp[j]++;
if(j*j<u){
mp[u/j]++;
}
}
}
long long ans = 0;
for(auto u:nums2){
ans += mp[u];
}
return ans;
}
};