详解“辗转相除法”(如何求最大公约数)
本篇博客来讲一讲学习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 谁大谁小了吧,因为就算取模的数比较小(即“较小数”%“较大数”),辗转相除法会自动把两个数交换位置,变成这样子:“较大数” % “较小数”
三、总结
辗转相除法是用于求两个非负整数的最大公约数的高效方法
这种方法可以不用去计算两个数谁大谁小,这样能够提高运算效率
具体还是看我上面的手绘图加深一下理解
这就是本篇博客的全部内容啦,如果有不足之处欢迎在评论区指出哦!
详解“辗转相除法”(如何求最大公约数)相关推荐
- php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...
详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...
- 『矩阵论笔记』详解最小二乘法(矩阵形式求导)+Python实战
详解最小二乘法(矩阵形式求导)+Python实战! 文章目录 一. 矩阵的迹 1.1. 转置矩阵 1.2. 迹的定义 1.3. 七大定理 二. 最小二乘法 2.1. 求解介绍 2.2. 另一角度 2. ...
- 暴力 gcd __gcd (详解)C语言求两个数的最大公约数
首先我们要先知道gcd是什么东西? GCD作为缩写意义有多种.它通常表示最大公约数(greatest common divisor,简写为gcd:或highest common factor,简写为h ...
- 辗转相除法原理(求最大公约数)
以往我们求最大公约数可以从采用遍历的方式(常规思路) 1.穷举法 int gcd(int a,int b) {for(int i=a;i>0;i--){if(a
- 详解,python求矩阵的秩,你肯定能看懂
在 Python 中,可以使用 NumPy 库求矩阵的秩. NumPy 库提供了 numpy.linalg.matrix_rank() 函数,该函数可以计算矩阵的秩. 求矩阵的秩知识点目录 Pytho ...
- 动态规划之如何将问题抽象转化为0-1背包问题(详解利用动态规划求方案数)
⭐️前面的话⭐️ 本篇文章介绍如何对问题抽象转化成0-1背包问题求解和运用0-1背包求方案数.
- c语言辗转相除法约分分数,更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)...
假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m* ...
- c语言l利用辗转相除法约分,如何用c语言求最大公约数和最小公倍数
如何用c语言求最大公约数和最小公倍数 输入两个正整数m和n, 求其最大公约数和最小公倍数. <1> 用辗转相除法求最大公约数 算法描述: m对n求余为a, 若a不等于0 则 m 否则 n ...
- 求最大公约数:更相减损法和辗转相除法
更相减损法原理 假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m,我们可以将较大的数161看成63+98,63与98的和161可以被m整除,其中63也可以被m整除,自 ...
最新文章
- Xcode可重用代码块code snippets
- 百度信息流和搜索业务中的KV存储实践
- SAP RETAIL WA03 基于分配表创建PO报错 - No work list could be selected –
- Android自定义RadioButton
- Harvard-X免费生物信息课程 (代码、文档、数据) - 适合系统学习
- Android多线程的使用
- 包含命名空间的xml反序列化 (1.7环境下)
- SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.
- 15-struct(构造函数,重载)
- python模板注入_Python 模板引擎的注入问题分析
- GY-53红外激光测距模块的使用以及pwm模式代码的实现
- 如何进行大文件传输?
- Angular JS introduce
- 超硬核!操作系统学霸笔记,考试复习面试全靠它
- Paper:LIME之《Why Should I Trust You? Explaining the Predictions of Any Classifier为什么要相信你?解释任何分类器的预测》翻
- 九招教你完全了解液晶拼接屏
- 什么是Subversion?
- 迅雷API批量下载巨潮年报
- 外企的那些所谓礼貌用语
- 双变量polynomial commitment