筛选因数快速法+map
前言:老是忘记怎么快速筛选因数,我们只需要枚举小于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;}
};