辗转相除法证明+最小公倍数证明+其他相关证明
2014-10-10 16:16
302 查看
原文地址:http://blog.csdn.net/niushuai666/article/details/7278027
正如上面所提到的,辗转相除法是编程中求最大公约数的常用算法,那么下面就是一个C++中通过递归实现辗转相除法的程序段范例:
注:过程名设为 gcd 是为了更明显的标明这段程序的意图。因为 gcd 是 greatest common divisor (最大公约数)的缩写。再编写辗转相除法求最大公约数的过程是,最好将其命名为 gcd 以方便他人日后阅读。
设q = a / b,r = a % b, 得a=bq+r(0≤r<b)。
1)若r = 0, 则b是a和b的最大公约数。
2)若r≠0,则继续考虑。首先,应该明白的一点是任何 a 和 b 的公约数都是 r 的公约数。要想证明这一点,就要考虑把 r 写成 r=a-bq。现在,如果 a 和 b 有一个公约数 d,而且设 a=sd , b=td, 那么 r = sd-tdq = (s-tq)d。因为这个式子中,所有的数(包括 s-tq )都为整数,所以 r 可以被 d 整除。对于所有的 d 的值,这都是正确的;所以 a 和 b 的最大公约数也是 b 和 r 的最大公约数。因此我们可以继续对 b 和 r 进行上述取余的运算。这个过程在有限的重复后,可以最终得到
r=0 的结果,我们也就得到了 a 和 b 的最大公约数。
证明:
设a,b两个整数,最大公约数为gcd,最小公倍数为lcm。
则a = k1 * gcd, b = k2 * gcd
lcm = a * t1 = k1 * gcd * t1 = p * k1;
lcm = b * t2 = k2 * gcd * t2 = q * k2;
又因为gcd(k1, k2) = 1,所以lcm = k1 * k2 * gcd = a * b / gcd;
所以,最小公倍数 = 两数之积 / 最大公约数
证法2:
因为k1 * gcd * t1 = lcm = k2 * gcd * t2
并且k1,k2互质,t1,t2互质,所以,k1 = t2, k2 = t1;
代入lcm = k1 * gcd * t1 = k1 * k2 * gcd = a * b / gcd ;
所以,最小公倍数 = 两数之积 / 最大公约数
a=pm,b=pn,a=q/e,b=q/d。………………………………………①
那么由最大公约数和最小公倍数的定义可得知:m与n互质,e与d也互质。……②
由①知道:m/n=d/e,再由②继续得知:m=d,n=e
而ab=pm×q/d=pq×m/d=pq,ab=pq
原式得证。及两个数的最大公约数和最小公倍数之积与这两个数之积相等。
辗转相除算法的简介
在数论中,辗转相除法(国际上一般称为Euclidean Algorithm 或 Euclid's Algorithm,即欧几里得算法)是一种求任意两个欧几里得环(Euclidean Domain)中的单位(如:整数)的最大公约数的算法。这个算法的一个重要特点就是其不需要通过分解因式来求取最大公约数。辗转相除法正因为其易操作性与易实现性而成为了计算机编程中的一个重要的求最大公约数的常用算法。辗转相除法的过程描述与应用
给出两个自然数 a 和 b:检查 b 是否为0;如果是,则 a 为最大公约数。如果不是,则分别用 b 和 a 除 b 的余数作为上一步中的 a 和 b 重复这一检查步骤。正如上面所提到的,辗转相除法是编程中求最大公约数的常用算法,那么下面就是一个C++中通过递归实现辗转相除法的程序段范例:
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
注:过程名设为 gcd 是为了更明显的标明这段程序的意图。因为 gcd 是 greatest common divisor (最大公约数)的缩写。再编写辗转相除法求最大公约数的过程是,最好将其命名为 gcd 以方便他人日后阅读。
辗转相除法的证明
设两数为a、b(a > b),求它们最大公约数的步骤如下:设q = a / b,r = a % b, 得a=bq+r(0≤r<b)。
1)若r = 0, 则b是a和b的最大公约数。
2)若r≠0,则继续考虑。首先,应该明白的一点是任何 a 和 b 的公约数都是 r 的公约数。要想证明这一点,就要考虑把 r 写成 r=a-bq。现在,如果 a 和 b 有一个公约数 d,而且设 a=sd , b=td, 那么 r = sd-tdq = (s-tq)d。因为这个式子中,所有的数(包括 s-tq )都为整数,所以 r 可以被 d 整除。对于所有的 d 的值,这都是正确的;所以 a 和 b 的最大公约数也是 b 和 r 的最大公约数。因此我们可以继续对 b 和 r 进行上述取余的运算。这个过程在有限的重复后,可以最终得到
r=0 的结果,我们也就得到了 a 和 b 的最大公约数。
最小公倍数证明:
最小公倍数 = 两数之积 / 最大公约数(可以了解一下短除法)证明:
设a,b两个整数,最大公约数为gcd,最小公倍数为lcm。
则a = k1 * gcd, b = k2 * gcd
lcm = a * t1 = k1 * gcd * t1 = p * k1;
lcm = b * t2 = k2 * gcd * t2 = q * k2;
又因为gcd(k1, k2) = 1,所以lcm = k1 * k2 * gcd = a * b / gcd;
所以,最小公倍数 = 两数之积 / 最大公约数
证法2:
因为k1 * gcd * t1 = lcm = k2 * gcd * t2
并且k1,k2互质,t1,t2互质,所以,k1 = t2, k2 = t1;
代入lcm = k1 * gcd * t1 = k1 * k2 * gcd = a * b / gcd ;
所以,最小公倍数 = 两数之积 / 最大公约数
两个数的最大公约数和最小公倍数之积与这两个数之积相等证明:
证明:设两个数a,b,他们的最大公约数是p,最小公倍数是q,令:a=pm,b=pn,a=q/e,b=q/d。………………………………………①
那么由最大公约数和最小公倍数的定义可得知:m与n互质,e与d也互质。……②
由①知道:m/n=d/e,再由②继续得知:m=d,n=e
而ab=pm×q/d=pq×m/d=pq,ab=pq
原式得证。及两个数的最大公约数和最小公倍数之积与这两个数之积相等。
相关文章推荐
- 辗转相除法证明+最小公倍数证明+其他相关证明
- 辗转相除法证明+最小公倍数证明+其他相关证明
- 最大公约数(辗转相除法)证明+最小公倍数证明+其他相关证明
- [总结]其他杂项数学相关(定理&证明&板子)
- robotframework相关资料 及其他测试相关资料
- 近日探得用C++将二进制数据存储到XML文件的方法,因在研究时,未得到网上其他同仁的帮助(网上搜索了半天没有相关资料,只有DOTNET的),在这里不敢独享,给别的同仁在搜索时能够搜索到相关资料,也算是绵薄之力! )
- MySQL数据库的导入与导出,及其他相关命令
- 概率相关的证明
- 初识Kafka:构架、生产消费模型以及其他相关概念
- 使用R语言绘制其他图形之相关系数图
- 二维码生成与扫描,二维码在开发中是非常常用的,本例子写的很明了,包分的很清楚,用的时候只要改变BarCodeTestActivity中的相关代码,其他的包直接复制就行了
- 百度笔试题2005题目大致是这样的: 第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP、RIP、IP、FTP中哪个协议是传输层的......。有一道linux的 chown使用题目。其他的全是数据结构的题目!什么链,表
- python面向对象其他相关-异常处理-反射
- iOS6对于shouldAutorotateToInterfaceOrientation的改动以及其他一些窗口相关细节
- 《数据之美》:概括描述了20个数据挖掘、数据可视化、云存储及其他数据处理相关项目
- WPF中的Frozen(冻结)与线程及其他相关问题
- Docker学习文档之三 其他相关-Dockerfile指令
- MFC调用WebBrowser控件直接编写javascript代码及其他WebBrowser相关技巧
- Android 之WebView实现下拉刷新和其他相关刷新功能