最大公约数

8 分钟

两个数公共因数里最大的那个,叫最大公约数(GCD)。比如 12 的因数有 ,18 的有 ,公共的是 ,最大的是 6,所以

最笨的办法是把两个数的因数都列出来找公共最大值,但没必要——下一节的辗转相除法几步就能算出。这里先看朴素理解:从两数中较小的往下试,第一个能同时整除两者的就是答案。

int gcdSlow(int a, int b) {
    int g = 1;
    for (int i = 1; i <= min(a, b); i++)
        if (a % i == 0 && b % i == 0) g = i;
    return g;   // 循环结束时 g 是最大的公共因数
}

复杂度 ,数大就慢。常见坑: 至少是 1(任何数都能被 1 整除),不会是 0;若其中一个数是 0,规定 。真正考试要用的是下一节的高效算法。

小纸条

12 和 18 的最大公约数是多少?

登录 后可看答案

最大公约数 · 考级冲刺 · op599 课程