侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【暴力, 枚举】公因子的数目【力扣第 313 场周赛】

GabrielxD
2022-10-02 / 0 评论 / 0 点赞 / 24 阅读 / 292 字 / 正在检测是否收录...

题目

6192. 公因子的数目


给你两个正整数 ab ,返回 ab 因子的数目。

如果 x 可以同时整除 ab ,则认为 xab 的一个 公因子

示例 1:

输入:a = 12, b = 6
输出:4
解释:12 和 6 的公因子是 1、2、3、6 。

示例 2:

输入:a = 25, b = 30
输出:2
解释:25 和 30 的公因子是 1、5 。

提示:

  • 1 <= a, b <= 1000

解题

方法一:暴力枚举

思路

1min(a,b)1 \sim min(a,b) 枚举每一个数,如果是a,ba, b 的公因子就增加计数(cnt)。

代码

class Solution {
    public int commonFactors(int a, int b) {
        int cnt = 0;
        for (int i = 1; i <= Math.min(a, b); ++i) {
            if (a % i == 0 && b % i == 0) ++cnt;
        }
        return cnt;
    }
}

优化

其实从 11 枚举到 a,ba,b 的最大公因数(gcd(a,b)\gcd(a, b))就可以了。

class Solution {
public:
    int commonFactors(int a, int b) {
        int cnt = 0;
        for (int i = 1; i <= __gcd(a, b); ++i) {
            if (a % i == 0 && b % i == 0) ++cnt;
        }
        return cnt;
    }
};
0

评论区