https://leetcode.com/problems/number-of-common-factors/description/
给定两个正整数a,ba,ba,b,求它们的正的公因子的个数。
求一下g=gcd{a,b}g=\gcd\{a,b\}g=gcd{a,b},然后看一下ggg有多少个正因子即可。求因子个数可以参考https://blog.csdn.net/qq_46105170/article/details/113815418。代码如下:
class Solution {public:int commonFactors(int a, int b) {unordered_map 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& 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(logmin{a,b}+∑iαi)O(\log \min\{a,b\}+\sum_i \alpha_i)O(logmin{a,b}+∑iαi),αi\alpha_iαi是ggg的每个因子的次数,空间O(k)O(k)O(k),kkk是不同因子的个数。
上一篇:史铁生的《病隙断笔》简称
下一篇:认识一下 ClickHouse