共因子的数量
给你两个正整数 a
和 b
,返回 a
和 b
的 公 因子的数目。
如果 x
可以同时整除 a
和 b
,则认为 x
是 a
和 b
的一个 公因子 。
解法一:
偏暴力的解法,从1开始遍历,一直到min(a, b),若遍历到的数值i可以整除a和b,则数量加1;
int commonFactors(int a, int b) {
int ans = 0;
for (auto i = 1; i <= min(a, b); ++i)
{
if (a % i == 0 && b % i == 0) ++ans;
}
return ans;
}
解法二:
解法1的做法从1遍历到a,b中的最小值,这样会浪费一些性能,因为只需要遍历到a和b的最大公约数即可。同时除数都是成对存在的,比如2和3均为6的除数,所以我们进一步减少遍历次数,只需要从1遍历到sqrt(gcd(a, b))。若遍历到的数值不为sqrt(gcd(a, b)),则+2,否则+1;
int commonFactors(int a, int b) {
int ans = 0;
int g = gcd(a, b);
for (auto i = 1; i <= sqrt(g); ++i)
{
if (g % i == 0)
{
cout << i << endl;
if (i * i != g) ans += 2;
else ++ans;
}
}
return ans;
}