题目地址:
https://leetcode.com/problems/number-of-common-factors/description/
给定两个正整数 a , b a,b a,b,求它们的正的公因子的个数。
求一下 g = gcd { a , b } g=\gcd\{a,b\} g=gcd{a,b},然后看一下 g g g有多少个正因子即可。求因子个数可以参考https://blog.csdn.net/qq_46105170/article/details/113815418。代码如下:
class Solution {
public:
int commonFactors(int a, int b) {
unordered_map<int, int> mp;
divide(gcd(a, b), mp);
int res = 1;
for (auto& [k, v] : mp) res *= v + 1;
return res;
}
void divide(int n, unordered_map<int, int>& mp) {
for (int i = 2; i <= n / i; i++) {
if (n % i == 0)
while (n % i == 0) {
n /= i;
mp[i]++;
}
}
if (n >= 2) mp[n]++;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
};
时间复杂度 O ( log min { a , b } + ∑ i α i ) O(\log \min\{a,b\}+\sum_i \alpha_i) O(logmin{a,b}+∑iαi), α i \alpha_i αi是 g g g的每个因子的次数,空间 O ( k ) O(k) O(k), k k k是不同因子的个数。