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

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(使用前将#替换为@)

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

  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 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的最大公约数 应用