欧几里得算法求最大公因数gcd原理证明
要证明欧几里得算法原理,首先需要证明下面两个定理(其中a,b都是整数):
1 如果c可以整除a,同时c也可以整除b,那么c就可以整除au + bv(u,v是任意的整数)。
这个定理的证明很简单,$\frac{au + bv}{c} = u\frac{a}{c} + v\frac{b}{c}$,因为c可以整除a、b,那么可以得到c可以整除au + bv。
2 如果a = qb + r,那么gcd(a, b) = gcd(b, r)。
证明如下:
因为a = qb + r,那么根据定理1,任何可以整除b,r的公因数,一定也可以整除a,也就是说b,r的公因数都是a,b的公因数;同理,因为r = a - qb,那么根据定理1,任何可以整除a,b的公因数,一定也可以整除r,也就是说a,b的公因数,同时也是b,r的公因数。因此,整数对a、b与整数对b、r有相同的公因数,于是也就有相同的最大公因数。定理得证。
那么接下来证明欧几里得算法。
如果a = q1b + r1,0 <= r1 < b;
同时b = q2r1 + r2,0 <= r2 < r1;
同时r1 = q3r2 + r3, 0 <= r3 < r2;
....
这样不停的分解下去,由于b > r1 > r2 > ... >= 0,那么这样分解下去的结果,必然会有一个rn = 0,这里分解结束。也就是说最后两步分解一定是:
rn-3 = qn-1rn-2 + rn-1 0 < rn-1 < rn-2;
rn-2 = qnrn-1 + rn,其中rn = 0
根据上面的定理2,gcd(a, b) = gcd(b, r1) = gcd(r1, r2) = ... = gcd(rn-2, rn-1)。由于rn-1可以整除rn-2,那么rn-1就是最大公因数。
上面的欧几里得算法证明当中,假设了a > 0, b > 0,但是这对证明没有影响,因为很容易知道:gcd(a, b) = gcd(-a, b) = gcd(a, -b) = gcd(-a ,-b),所以我们只需要证明a >0, b > 0的情形就可以了。
另外补充一点就是,根据除法定理:
对于任意整数a和b,其中b != 0,那么一定存在一组整数,使得:
a = qb + r, 其中0 <= r <|b|。
欧几里得算法求最大公因数gcd原理证明的更多相关文章
- 欧几里得算法求最大公约数(gcd)
关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } ...
- 详解扩展欧几里得算法(扩展GCD)
浅谈扩展欧几里得(扩展GCD)算法 本篇随笔讲解信息学奥林匹克竞赛中数论部分的扩展欧几里得算法.为了更好的阅读本篇随笔,读者最好拥有不低于初中二年级(这是经过慎重考虑所评定的等级)的数学素养.并且已经 ...
- 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用
一.欧几里得算法及其证明 1.定义: 欧几里得算法又称辗转相除法,用于求两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b): 2.证明: 设x为两整数a,b(a>=b)的最大公约 ...
- 【learning】 扩展欧几里得算法(扩展gcd)和乘法逆元
有这样的问题: 给你两个整数数$(a,b)$,问你整数$x$和$y$分别取多少时,有$ax+by=gcd(x,y)$,其中$gcd(x,y)$表示$x$和$y$的最大公约数. 数据范围$a,b≤10^ ...
- 欧几里得算法求最大公约数-《Algorithms Fourth Edition》第1章
最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小公倍数,记为[a, b]. 在求最大公 ...
- 关于欧几里得算法求最大公约数,即OJ1029的参考解法
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,c; scanf("%d %d",& ...
- 模板——扩展欧几里得算法(求ax+by=gcd的解)
Bryce1010模板 /**** *扩展欧几里得算法 *返回d=gcd(a,b),和对应等式ax+by=d中的x,y */ long long extend_gcd(long long a,long ...
- gcd(欧几里得算法)与exgcd(扩展欧几里得算法)
欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b) => a=m*d,b=n ...
- lame定理求欧几里得算法的求余和赋值次数
根据lame定理,根据欧几里得算法求(a,b)的最大公因数过程如下(假设a>b):
- ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)
1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...
随机推荐
- 【已解决】Hadoop_02 bash: start-all.sh: 未找到命令...Linux
在配置hadoop时需要进到/etc/profile中修改hadoop路径 #配置Hadoop和Java环境 export JAVA_HOME=/JDK-1.8 #你自己Java的安装路径 expor ...
- 使用 rollup 打包可按需加载的 NPM 包
安装 rollup npm install rollup --save-dev 配置文件 rollup.config.js export default { input: 'src/index.js' ...
- HTTPS加密套件的笔记
本文于2016年5月份完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 按照如下配置(适用于Tomcat 7.0.x),为Tomcat启用了 ...
- web.xml最新配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- k8s之基于metallb实现LoadBalancer型Service
一.实验说明 1.介绍 MetalLB 是裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议,主要用于暴露 K8s 集群的服务到集群外部访问,MetalLB 可以让我们在 K8s 集群 ...
- 面试连环炮系列(二十️四):为什么选择RocketMQ
为什么选择RocketMQ,而不是其他MQ 性能:阿里支撑,经受住淘宝,天猫双11重重考验:性能高:可靠性好:可用性高:易扩展. 功能:功能完善,我们需要的功能基本都够满足,如:事务消息,消息重试,死 ...
- Node.js 与前端开发实战
0x1 Node.js 的应用场景 前端工程化 打包工具:webpack.vite.esbuild.parce 代码压缩:uglifyjs 语法转换:babeljs,typescript 难以替代 W ...
- Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream
Mysql系列:Mysql5.7编译安装 系统环境:Centos7 / CentOS9 Stream 1:下载mysql源码包 https://dev.mysql.com/downloads/mysq ...
- 在 macOS Big Sur 上安装 MySQL 8.x Compressed TAR Archive
因个人能力有限,文章难免存在错误,望斧正,感谢. 版本: macOS 11.6 Intel版本 MySQL 8.0.26 Compressed TAR Archive 一.准备所需文件 前往 MySQ ...
- orleans —————— 为什么有这个框架 [ 一]
前言 简单说明一下,为什么有orleans 这个框架. 正文 orleans 这个框架的理论基础是 actor, 在1973年提出,当初是为了大量处理高并发计算机的并行模型,其核心思想是将系统中独立的 ...