三分钟理解辗转相除法
今天下午偶然看到辗转相除法, 以前不能够理解原理, 现在能够想明白了.
比如求gcd(1211, 341)
#include <iostream>
#include <string>
using namespace std;int gcd(int a,int b){printf("%d = %d * %d + %d\n",a,a/b,b,a%b);if(b==0) return a;else return gcd(b,a%b);
}
int main() {int a = 1211, b = 341;cout << gcd(a,b) << endl;return 0;
}
1211 = 3 * 341 + 188
341 = 1 * 188 + 153
188 = 1 * 153 + 35
153 = 4 * 35 + 13
35 = 2 * 13 + 9
13 = 1 * 9 + 4
9 = 2 * 4 + 1
4 = 4 * 1 + 0
所以最大公约数为1
我们是不是可以有这么一条逻辑链
1可以倍乘得到4
1和4可以得到9
1,4,9可以得到13
1,4,9,13可以得到35
…
直到1,4,9,13,35,153,188,341的各自的K(k>=0)次幂的和等于1211
我们知道任何一个数都可以用二进制数来表示, 比如7 = 2^0 * 1 + 2^1 * 1 + 2^2 * 1
我们姑且认为7是由集合{1,2,4,…}中的元素组成的
那么1211也可以用一个给定的集合{1,4,9,13,35,153,188,341}组成
而这个集合中最小的元素可以组成这个集合中所有的元素, 就像1可以得到1,2,4一样, 1也可以得到1,4,9,13等等.
所以求最小的公约数其实就是找到谁才应该是这个集合中最小的元素. 那么当第二小的元素除以某一个数x余数为0时, 那么很明显x就是集合中最小的那个元素了.
三分钟理解辗转相除法相关推荐
- 三分钟理解零序电流保护向量图
三分钟理解零序电流保护向量图 --ujslili 1.正向故障 疑问? 2.反方向故障: 3.接线方式 4.零序电流保护的评价 优点: 1)灵敏度高--几乎不受负荷电流影响--影响零序电流的就只有变压 ...
- 三分钟理解Python函数式编程与闭包
函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...
- 三分钟理解RAFT光流网络中的Iterative Updates
Iterative Updates 这段话给iterative updates以定性,输入一个初始化的流场,逐步地更新这个流场. 具体来讲:输入->流场.相关性金字塔和隐藏状态 输出->更 ...
- 用三分钟理解c语言sizeof
一.概念 sizeof是单目操作符,同++等操作符一样.作用是以字节形式输出操作对象所在储存大小. 二.用法 a.操作数据类型 如sizeof(int),输出int类型在内存中所占的字节长度,具体取决 ...
- 三分钟理解三种基本进程状态
进程的三种基本状态 进程在生命周期内可能有多种状态,不过一般而言,每一个进程都至少有三种基本状态 就绪(Ready)状态 进程已处于准备运行的状态,获得除CPU以外所有必要的资源.如果获得CPU,则立 ...
- [ 大道至简系列 ] 三分钟理解-1NF,2NF,3NF
- 5分钟理解Iass Pass SasS三种云服务区别
5分钟理解Iass Pass SasS三种云服务区别 其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼.中间.低层三大块. 那么我们就可以把Iass(基础设施).Pass ...
- C#三分钟教你理解DataTable、Datarow、DataColumn的关系以及用法
C#三分钟教你理解DataTable.Datarow.DataColumn的关系以及用法! 码字不易,点赞关注加收藏,谢谢各位看官老爷了!!!!. 码字不易,点赞关注加收藏,谢谢各位看官老爷了!!!! ...
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...
最新文章
- 关于ASP.NET 中站点地图sitemap 的使用【转xugang】
- VC常见数据类型转换详解
- 【Linux】7_存储管理基本分区
- canvas中strokeRect的渲染问题strokeRect把一像素的边框渲染成两像素
- Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
- python客户端与服务器端通信_python客户端与服务器端的通信
- Python爬虫Scrapy入门
- [c++11]我理解的右值引用、移动语义和完美转发
- steam授权_Epic喜+1:塔洛斯的法则|Steam上周销量榜出炉|格力折叠屏手机专利授权...
- RS232串口线连接方法
- 混沌工程(Chaos Engineering) 到底是什么?
- 截止失真放大电路_音频功放失真?别急!这里有常见改善方法
- Android IBeacon
- 闰秒 mysql_闰秒导致MySQL服务器的CPU sys过高
- 【leetcode刷题班】贪心题目求解
- 11 编程指南_流数据
- 玩法专利获批,发布4年《Beat Saber》为何持续火爆
- python学习笔记(一)数据处理
- Python 用Ursina 3D引擎做一个太阳系行星模拟器
- 常见专业术语名词解释(持续更新)