当前位置: 首页 > article >正文

求最大公约数

这段代码是一个实现求两个整数最大公约数(Greatest Common Divisor, GCD)的经典算法,通常称为欧几里得算法(Euclidean algorithm)。下面是对这个函数的详细解释:

int gcd(int a, int b) {    
    while (b != 0) {    
        int temp = b;  // 将b的值暂存到temp中  
        b = a % b;     // 用a除以b的余数来更新b的值  
        a = temp;      // 将原来的b值(现在保存在temp中)赋给a  
    }    
    return a;  // 当b变为0时,循环结束,此时a即为两数的最大公约数  
}

这个算法的基本思想是利用辗转相除法(也称欧几里得除法)来求两个数的最大公约数。在任意给定两个正整数a、b(假设a>b),它们的最大公约数与b、a%b的最大公约数相同。其中“%”表示取模运算,即a除以b的余数。

算法的步骤如下:

  1. 比较两个数a和b,如果b为0,则最大公约数为a,算法结束。
  2. 否则,将a除以b得到的余数赋值给b,原来的b值赋给a。
  3. 重复步骤1和2,直到b为0为止,此时的a即为最大公约数。

这个算法之所以有效,是因为根据数学原理,两个整数的最大公约数不会比它们中较小的那个数大。通过不断将较大的数替换为两数相除的余数,直到余数为0,此时另一个数就是两数的最大公约数。

例如,求48和18的最大公约数:

  • 48 % 18 = 12,此时a=18, b=12
  • 18 % 12 = 6,此时a=12, b=6
  • 12 % 6 = 0,此时a=6, b=0,循环结束,6即为48和18的最大公约数。


http://www.kler.cn/a/315913.html

相关文章:

  • 前端(3)——快速入门JaveScript
  • 122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
  • LeetCode面试经典150题C++实现,更新中
  • Serverless架构在实时数据处理中的应用
  • SQL面试题——蚂蚁SQL面试题 会话分组问题
  • Java集合框架之Collection集合遍历
  • CSS 布局三大样式简单学习
  • 【解密 Kotlin 扩展函数】命名参数和默认值(十三)
  • 【深入Java枚举类:不仅仅是常量的容器】
  • 数据结构——串的模式匹配算法(BF算法和KMP算法)
  • 设计模式-装饰者模式
  • VMware虚拟机经常性卡死,打开运行一段时间后卡死,CPU占比增至100%
  • 电脑网络怎么弄动态ip :步骤详解与优势探讨
  • Tomcat系列漏洞复现
  • AI时代最好的编程语言应该选择谁?
  • vue h5 蓝牙连接 webBluetooth API
  • MySQL 中删除重复的数据并只保留一条
  • C#实现指南:将文件夹与exe合并为一个exe
  • vscode 环境搭建
  • 神经网络修剪实战
  • ubuntu安装docker compose
  • 解决 TortoiseGitPlink Fatal Error:深入解析
  • JS巧用.padStart()|.padEnd()方法用另一个字符串填充当前字符串
  • 9月16日笔记
  • 工作笔记:Vue 3 中使用 vue-router 进行导航与监听路由变化
  • 关于 Qt运行加载内存较大崩溃添加扩大运行内存 的解决方法