#3499. [GESP202506 五级 C++] 第 6 题

[GESP202506 五级 C++] 第 6 题

下列C++代码用两种方式求解两个正整数的最大公约数,说法错误的是( )。

int gcd0(int big, int small) {
    if (big < small) {
        swap(big, small);
    }
    if (big % small == 0) {
        return small;
    }
    return gcd0(small, big % small);
}

int gcd1(int big, int small) {
    if (big < small) {
        swap(big, small);
    }
    for (int i = small; i >= 1; --i) {
        if (big % i == 0 && small % i == 0)
            return i;
    }
    return 1;
}

{{ select(1) }}

  • gcd0() 函数的时间复杂度为 O(logn)O(\log n)
  • gcd1() 函数的时间复杂度为 O(n)O(n)
  • 一般说来,gcd0() 的效率高于 gcd1()
  • gcd1() 中的代码 for (int i = small; i >= 1; --i) 应该修改为 for (int i = small; i > 1; --i)