✏️ 纠错
第 182 题 / 共 251 题
第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;
}
📝 题目解析

答案:D

知识点:最大公约数的求解算法,算法时间复杂度分析

解析:A正确,gcd0是辗转相除法,时间复杂度O(logn);B正确,gcd1是枚举法,最坏情况需遍历到1,复杂度O(n);C正确,辗转相除法效率远高于枚举法;D错误,若两数最大公约数为1(如2和3),修改后循环会漏掉i=1,导致错误。