Aaa17181917 2024-10-22 10:44:18
能帮我看看这个循环有什么问题吗 long long gcd(long long a,long long b){ long long i; i=min(a,b); while(i>=1){ if(a%i==0&&b%i==0) break; i--; } return i; }
...全文
60 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
半截诗​ 2024-10-22
  • 打赏
  • 举报
回复

你提供的代码是一个使用暴力算法来计算两个数的最大公约数(GCD)的函数。代码的工作原理如下:

  1. 初始化变量 i 为输入的两个数 ab 中较小的那个,因为最大公约数不可能大于较小的数。
  2. 进入一个循环,检查 ab 是否都能被 i 整除(即 a % i == 0 && b % i == 0)。如果满足这个条件,i 就是这两个数的最大公约数,循环终止。
  3. 如果不满足条件,则将 i 减 1,然后再次检查。
  4. 循环持续进行,直到 i 减到 1 或找到最大公约数为止。
  5. 最终,函数返回 i 的值,即这两个数的最大公约数。

然而,这种方法对大数不够高效,因为它的时间复杂度为 (O(\min(a, b)))。更高效的计算 GCD 方法是使用欧几里得算法,其时间复杂度为 (O(\log(\min(a, b))))。

下面是使用欧几里得算法实现的 GCD 计算代码:

long long gcd(long long a, long long b) {
    while (b != 0) {
        long long temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

这个实现不断将 a 替换为 b,将 b 替换为 a % b,直到 b 等于零为止,此时 a 就是最大公约数。

4,032

社区成员

发帖
与我相关
我的任务
社区描述
StarCode是一个为编程探索者打造的社区,这里星辰闪耀,代码如诗。我们汇聚热忱,追逐编程的无限可能。在这片数字星空,每段代码都是探索未来的星火,点亮梦想航程。加入我们,用代码编织星河,共同成长。
后端c++c语言 个人社区 北京·房山区
社区管理员
  • 半截诗​
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧