✏️ 纠错
第 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,导致错误。