跳转至

最大公约数

Euclid算法

计算 bigsmall (其中 small \leq big )的最大公约数

  • 只要 samll 不为 0 则:

big,samll = small,big \pmod {small}

  • 否则: big 为所求

Euclid算法的时间复杂度为 O(max(big))

代码

迭代版

int gcd(int big, int small) {
    int tmp;
    while (small != 0) tmp = small, small = big % small, big = small;
    return big;
}

递归版

int gcd(int big, int small) {
    if (small == 0) return big;
    return gcd(big % small, small);
}