要证明欧几里得算法原理,首先需要证明下面两个定理(其中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原理证明的更多相关文章

  1. 欧几里得算法求最大公约数(gcd)

    关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } ...

  2. 详解扩展欧几里得算法(扩展GCD)

    浅谈扩展欧几里得(扩展GCD)算法 本篇随笔讲解信息学奥林匹克竞赛中数论部分的扩展欧几里得算法.为了更好的阅读本篇随笔,读者最好拥有不低于初中二年级(这是经过慎重考虑所评定的等级)的数学素养.并且已经 ...

  3. 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用

    一.欧几里得算法及其证明 1.定义: 欧几里得算法又称辗转相除法,用于求两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b): 2.证明: 设x为两整数a,b(a>=b)的最大公约 ...

  4. 【learning】 扩展欧几里得算法(扩展gcd)和乘法逆元

    有这样的问题: 给你两个整数数$(a,b)$,问你整数$x$和$y$分别取多少时,有$ax+by=gcd(x,y)$,其中$gcd(x,y)$表示$x$和$y$的最大公约数. 数据范围$a,b≤10^ ...

  5. 欧几里得算法求最大公约数-《Algorithms Fourth Edition》第1章

    最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小公倍数,记为[a, b]. 在求最大公 ...

  6. 关于欧几里得算法求最大公约数,即OJ1029的参考解法

    #include <stdio.h> int main(int argc, char *argv[]) { int a,b,c; scanf("%d %d",& ...

  7. 模板——扩展欧几里得算法(求ax+by=gcd的解)

    Bryce1010模板 /**** *扩展欧几里得算法 *返回d=gcd(a,b),和对应等式ax+by=d中的x,y */ long long extend_gcd(long long a,long ...

  8. gcd(欧几里得算法)与exgcd(扩展欧几里得算法)

    欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b)  =>  a=m*d,b=n ...

  9. lame定理求欧几里得算法的求余和赋值次数

    根据lame定理,根据欧几里得算法求(a,b)的最大公因数过程如下(假设a>b):

  10. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...

随机推荐

  1. 【已解决】Hadoop_02 bash: start-all.sh: 未找到命令...Linux

    在配置hadoop时需要进到/etc/profile中修改hadoop路径 #配置Hadoop和Java环境 export JAVA_HOME=/JDK-1.8 #你自己Java的安装路径 expor ...

  2. 使用 rollup 打包可按需加载的 NPM 包

    安装 rollup npm install rollup --save-dev 配置文件 rollup.config.js export default { input: 'src/index.js' ...

  3. HTTPS加密套件的笔记

    本文于2016年5月份完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 按照如下配置(适用于Tomcat 7.0.x),为Tomcat启用了 ...

  4. web.xml最新配置文件

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  5. k8s之基于metallb实现LoadBalancer型Service

    一.实验说明 1.介绍 MetalLB 是裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议,主要用于暴露 K8s 集群的服务到集群外部访问,MetalLB 可以让我们在 K8s 集群 ...

  6. 面试连环炮系列(二十️四):为什么选择RocketMQ

    为什么选择RocketMQ,而不是其他MQ 性能:阿里支撑,经受住淘宝,天猫双11重重考验:性能高:可靠性好:可用性高:易扩展. 功能:功能完善,我们需要的功能基本都够满足,如:事务消息,消息重试,死 ...

  7. Node.js 与前端开发实战

    0x1 Node.js 的应用场景 前端工程化 打包工具:webpack.vite.esbuild.parce 代码压缩:uglifyjs 语法转换:babeljs,typescript 难以替代 W ...

  8. Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream

    Mysql系列:Mysql5.7编译安装 系统环境:Centos7 / CentOS9 Stream 1:下载mysql源码包 https://dev.mysql.com/downloads/mysq ...

  9. 在 macOS Big Sur 上安装 MySQL 8.x Compressed TAR Archive

    因个人能力有限,文章难免存在错误,望斧正,感谢. 版本: macOS 11.6 Intel版本 MySQL 8.0.26 Compressed TAR Archive 一.准备所需文件 前往 MySQ ...

  10. orleans —————— 为什么有这个框架 [ 一]

    前言 简单说明一下,为什么有orleans 这个框架. 正文 orleans 这个框架的理论基础是 actor, 在1973年提出,当初是为了大量处理高并发计算机的并行模型,其核心思想是将系统中独立的 ...