详解“辗转相除法”(如何求最大公约数)

2023-11-04

本篇博客来讲一讲学习C语言过程中遇到的一种解法——辗转相除法

首先我会介绍辗转相除法的概念,然后会用一道例题进行运用,最后会进行总结

一、辗转相除法的概念

辗转相除法又称欧几里得算法辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。

由概念可知,该算法主要是用于两个非负整数的最大公约数,那么如何求呢,请看下文分析

二、如何利用辗转相除法求两个数的最大公约数

这里先看代码:

int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d", &m, &n);
    int k = 0;
    while (k = m % n)
    {
        m = n;
        n = k;
    }
    printf("%d\n", n);

    return 0;
}

所谓辗转,指的就是把 m % n 赋给k,把 n 赋给 m ,最后再把 k 赋给 n ,直到 k 为零的时候,while循环也会刚好停下,此时的 k 就是 m 和 n 的最大公约数了。

这样说属实有点绕,请C友们结合我画的思路图理解一下:

另外,辗转相除法相较于传统写法,有一个较大的优点就是:辗转相除法不用去求 m 和 n 哪个大哪个小,下面请看我用一幅图给大家解释清楚:

这里大家应该就能理解到我说的不用管 m 和 n 谁大谁小了吧,因为就算取模的数比较小(即“较小数”%“较大数”),辗转相除法会自动把两个数交换位置,变成这样子:“较大数” % “较小数”

 三、总结

辗转相除法是用于求两个非负整数的最大公约数的高效方法

这种方法可以不用去计算两个数谁大谁小,这样能够提高运算效率

具体还是看我上面的手绘图加深一下理解

这就是本篇博客的全部内容啦,如果有不足之处欢迎在评论区指出哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解“辗转相除法”(如何求最大公约数) 的相关文章

随机推荐

  • waitpid的作用

    waitpid的使用 waitpid用于等待特定的进程结束之后 主进程再继续执行 这时主进程会进入阻塞状态 在fork之后 如果子进程不使用waitpid 则可能时主进程先结束 也可能时子进程先结束 子进程 include
  • Spring核心概念

    BeanDefinition BeanDefinition表示Bean定义 BeanDefinition中存在很多属性用来描述一个Bean的特点 比如 class 表示Bean类型 scope 表示Bean作用域 单例或原型等 lazyIn
  • python3 leecode之快乐数

    题目 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果 可以变为 1 那么这个数就是快乐
  • 05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】

    Mysql夺命三连问 什么是索引下推 什么是索引覆盖 什么是回表 索引下推是mysql5 6 提出的一个查询优化方案 主要的目的是减少数据或查询中不必要的读取和计算 它的原理是将查询条件尽可能的推送到索引层面进行过滤 减少从磁盘读取的数据量
  • Win10报错! 由于找不到hhctrl.ocx win10运行帮助时hhctrl.ocx缺失的解决方法

    hhctrl ocx下载地址 1 到网上下载hhctrl ocx 然后将下载的ocx文件复制到C Windows System32目录下 Win7 Vista系统的路径是一样的 64位放到C Windows SysWOW64 2 开始 菜单
  • 使用OpenCV对物体搜索检测与识别

    在本教程中 我们将了解对象检测中称为 选择性搜索 的重要概念 我们还将用C 和Python共享OpenCV代码 物体检测与物体识别 对象识别算法识别图像中存在哪些对象 它将整个图像作为输入 并输出该图像中存在的对象的类标签和类概率 例如 类
  • vue3 - setup之defineEmits

    基础形式 子组件 const emits defineEmits name 触发emits事件 const eventButton gt emits name 父组件
  • 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容

    一 引言 在 第14 10节 Python中使用BeautifulSoup解析http报文 html标签相关属性的访问 介绍了BeautifulSoup对象的主要属性 通过这些属性可以访问标签 内容 但这种方法要么就只能访问符合条件的第一个
  • robot framework 使用三:浏览器兼容性自动化

    robot framework 测试浏览器兼容性 上图中黄色圈的地方默认什么都不写 是firefox浏览器 写上ie就是ie浏览器了 firefox最新版本就行 ie需要设置 1 IE选项设置的安全页中 4个区域的启用保护模式的勾选都勾上
  • git commit遇到的问题:error: pathspec ‘xxx‘ did not match any file(s) known to git

    问题 git commit 时出现报错 error pathspec xxx did not match any file s known to git 原因 未知 可以看下其他人的答案 查询其他人的说法 远程分支与本地分支没有建立连接等
  • C++中的类模板(黑马程序员)

    目录 类模板 类模板 1 1 类模板语法 1 2 类模板与函数模板区别 1 3 类模板中成员函数创建时机 1 4 类模板对象做函数参数 主要了解类模板实例化出的对象后 如何向函数传参 1 5 类模板与继承 1 6 类模板成员函数类外实现 1
  • 使用GetOpenFileName创建“选择文件”对话框

    GetOpenFileName用于创建一个打开文件对话框 存在于头文件commdlg h 原型 BOOL WINAPI GetOpenFileName Inout LPOPENFILENAME lpofn lpofn为一个指向OPENFIL
  • MySQL JDBC URL中几个重要参数说明

    jdbc mysql host port host port database 参数名1 参数值1 参数名2 参数值2 参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名 用于连接数据库 所有版本 password 用户密码
  • tensorflow中如何average checkpoint

    首先获取checkpoint的状态以及每个参数的值 ckpt state tf train get checkpoint state model dir ckpts ckpt state all model checkpoint paths
  • java - 面向对象程序的三大特性 封装、继承、多态

    目录 1 封装 1 1访问限定符 1 2包 1 3导入包中的类 1 4如何自定义包 1 5 包的访问权限控制举例 1 6 常见的包 1 7如果修改封装好的成员变量 2 继承 什么继承 子类中访问父类成员变量 子类和父类不存在同名成员变量 子
  • windows电脑文件传输至ipad/iphone

    前言 个人分享而已 好坏对错与否勿喷 介意就别看 文明上网 tips1 本方法适用于稍微有点计算机基础的伙伴们 tips2 本方法需要你的电脑上已经安装并配置好了python 只要你电脑可以进行python代码程序运行就是ok的 tip3
  • Vue使用axios、解决axios跨域

    axios axios文档 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端 从浏览器中创建 XMLHttpRequests 从 node js 创建 http 请求 支持 Promise API 拦截
  • 用vue3 写出一个完整的用户登录界面

    首先 安装必要的依赖包 npm install vue next vue router vuex 然后 创建一个名为App vue的根组件
  • 基于GRU的时间序列预测及matlab代码实现

    基于GRU的时间序列预测及matlab代码实现 时间序列预测在实际应用中非常重要 如股票市场预测 气象预报 交通流量预测等 门控循环单元 Gated Recurrent Unit GRU 是一种比较新的循环神经网络结构 具有快速训练和处理长
  • 详解“辗转相除法”(如何求最大公约数)

    本篇博客来讲一讲学习C语言过程中遇到的一种解法 辗转相除法 首先我会介绍辗转相除法的概念 然后会用一道例题进行运用 最后会进行总结 一 辗转相除法的概念 辗转相除法又称欧几里得算法辗转相除法 是指用于计算两个非负整数a b的最大公约数 应用