欧几里得算法的自然语言描述

计算两个非负整数p和q的最大公约数:

若q是0,则最大公约数为p。否则将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。

数学归纳法证明

基础步骤:

若q = 0,则 gcd(p, q) = gcd(p, 0) = p。

归纳步骤:

令 p = a * q + r, 其中 p、a、q、r 均为非负整数。

设 d 整除 p 和 q, 则 d 可以整除 p - a * q = r,即 p / d = a*q / d + r / d 。

此时, d 为 p,q 的公约数,且 d 为 q,r 的公约数,即 p 和 q 的公约数 = q 和 r 的公约数 = d 。

也即 gcd(p, q) = gcd(q, r) ,  其中 r 为 p 除以 q 的余数。

不断归纳,直至函数 gcd 的第二个参数为0,此时得到基础步骤。

此时我们已经证明了最终的结果是 p 和 q 的一个约数。

然而这还没完,因为我们只证明了最终结果是一个公约数,但没有证明它是最大的公约数。

因为 d 整除 p 和 q,可得 d 整除 p - a * q = r, 因此 p 和 q 的任意约数也为 q 和 r 的约数;

同理,d整除 q 和 r, 可得 d 整除 a * q + r  = p, 因此q 和 r 的任意约数也为 p 和 q 的约数。

综上,p 和 q 的约数集等于 q 和 r 的约数集。

接下来由递推法:

假定当函数gcd()的第二个参数为0时,第一个参数为m,可得 p 和 q 的约数集与 m 和 0 的约数集相同。

由数学归纳法的基础情况知, 而 m 和 0 的最大公约数为 m, 即 m 和 0 的约数集的最大值为 m,

由此可得 p 和 q 的约数集的最大值也为 m 。

综上,欧几里得算法得证。

献上Java代码:

 public class Euclid
{
public static int gcd(int p, int q) {
  if(q == 0)
  return p;
  int r = p % q;
  return gcd(q,r);
} public static void main(String[] args) {
int result = gcd(16, 24);
System.out.println(result);
   }
 }

Algorithms4th 1.1.25 欧几里得算法——数学归纳法证明的更多相关文章

  1. 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去

    写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...

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

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

  3. 关于欧几里得算法(gcd)的证明

    求a,b的最大公约数我们经常用欧几里得算法解决,也称辗转相除法, 代码很简短, int gcd(int a,int b){ return (b==0)?a:gcd(b,a%b); } 但其中的道理却很 ...

  4. 初等数论-Base-2(扩展欧几里得算法,同余,线性同余方程,(附:裴蜀定理的证明))

    我们接着上面的欧几里得算法说 扩展欧几里得算法 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式\(^①\): ax+by = gcd(a, b) =d(解一定存在,根据数论中的 ...

  5. 『扩展欧几里得算法 Extended Euclid』

    Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...

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

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

  7. noip知识点总结之--欧几里得算法和扩展欧几里得算法

    一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a  ...

  8. 欧几里得算法与扩展欧几里得算法_C++

    先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...

  9. 最小公约数(欧几里得算法&&stein算法)

    求最小公约数,最easy想到的是欧几里得算法,这个算法也是比較easy理解的,效率也是非常不错的. 也叫做辗转相除法. 对随意两个数a.b(a>b).d=gcd(a.b),假设b不为零.那么gc ...

随机推荐

  1. http各个状态码的含义

    http各个状态码的含义:由三位数字组成,第一位定义了状态码的类型 常见状态码及解决方法 404:找不到,地址错误 500:逻辑错误 400:一般是入参不匹配 504:超时 2开头:(请求成功)表示成 ...

  2. github上拉去代码执行 npm install报错code:128

    npm ERR! code npm ERR! Command failed: D:\Program Files\Git\cmd\git.EXE clone --mirror -q git://gith ...

  3. Linux启动redis提示 /var/run/redis_6379.pid exists, process is already running or crashed

    执行启动命令:service redisd start 提示信息:/var/run/redis_6379.pid exists, process is already running or crash ...

  4. Change the environment variable for python code running

    python程序运行中改变环境变量: Trying to change the way the loader works for a running Python is very tricky; pr ...

  5. MaxCompute按量计费计算任务消费监控告警

    MaxCompute 按量计费资源为弹性伸缩资源,对于计算任务,按任务需求提供所需资源,对资源使用无限制,同时MaxCompute按量计费的账单为天账单,即当天消费需要第二天才出账,因此,有必要对计算 ...

  6. POJ 1502 MPI MaeIstrom ( 裸最短路 || atoi系统函数 )

    题意 : 给出 N 个点,各个点之间的路径长度用给出的下三角矩阵表示,上上角矩阵和下三角矩阵是一样的,主对角线的元素都是 0 代表自己到达自己不用花费,现在问你从 1 到 N 的最短路,矩阵的 x 代 ...

  7. C#防止窗口重复打开

    修改Program.cs文件 using System; using System.Collections.Generic; using System.Linq; using System.Windo ...

  8. window安装rsync客户端和服务端

    原文地址: https://www.cnblogs.com/janas/p/3321087.html 下载地址: https://linux.linuxidc.com/index.php?folder ...

  9. sql常用 语句总结

    一,插入一个新字段:ALTER TABLE +表名+ADD  COLUMN(字段名+ 类型) sql1 = 'ALTER TABLE klkl_4s_shop ADD COLUMN (name_rea ...

  10. P哥的桶(线段树+线性基)

    https://www.luogu.org/problem/P4839 题目: 有两个操作 1 a b  在a的位置添加b数值  (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意 ...