• 小知识:什么是「欧几里得算法」


    640?wx_fmt=jpeg

    问题导入

    12 和 18 的最大公约数是多少?

    最大公约数:最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。例如:18 与 12 的最大公约数为 6 。

    短除法

    短除法是求最大公因数的一种方法:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。

    640?wx_fmt=png

    因式分解法

    640?wx_fmt=png

    在初中数学题中,基本上我们就是采取因式分解或者短除法的形式来求最大公约数。

    但是它们存在的问题是:当公共素因子较小时,通过观察可以很快找出;但是当公因子较大时,仅仅通过观察已经很难找出甚至在一定时间内找不出。

    比如求 22008 和 655 的最大公约数时,很难直接找到其公因子。

    那么有没有更好的方法来求解最大公约数呢?答案是有的,就是接下来要介绍的欧几里得算法。

    欧几里得算法

    欧几里得算法(英语:Euclidean algorithm),又称 辗转相除法,是求最大公约数的算法。

    辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。

    辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

    辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252 和 105 的最大公约数是 21;因为 252 − 105 = 21 × (12 − 5) = 147 ,所以 147 和 105 的最大公约数也是 21。

    在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。

    这时,所剩下的还没有变成零的数就是两数的最大公约数。

    将上面的较大的数缩小的过程中往往使用的是 MOD 操作。

    MOD,是一个 数学 运算符号-----求余运算符。

    例如 a mod b = c,表明 a 除以 b 余数为 c 。 在整数的除法中,只有能整除与不能整除两种情况,所以当不能整除时,就会产生余数。

    我们借助于 MOD 使用 辗转相除法 的概念来求数字 1112 和数字 695 的最大公约数。

    当余数变为 0 的时候,最后一个操作的 除数 是最大公约数,即 139 是数字 1112 和数字 695 的最大公约数。

    640?wx_fmt=png

    设计来源于算法动画讲解

    一般算法流程如下:

    640?wx_fmt=png

    动画理解

    通过动画来理解一下为什么使用 辗转相除法 可以找到最大公约数。

    将最大的公约数设置为 n,当然虽然一开始对于每个整数是不知道可以分段成多少个 n 的,但是,可以知道 1112 和 695 都是最大公约数 n 的倍数。

    640?wx_fmt=png

    通过 mod 操作,不停的找余数。

    640?wx_fmt=gif
    640?wx_fmt=gif

    最后两个数是倍数关系,可以整除,余数为 0 ,结束了操作。

    640?wx_fmt=gif

    此时剩下的一条线段的长度就是 1112 和 695 的最大公因数。

    END

    640?wx_fmt=png



    推荐阅读







    640?wx_fmt=png



    欢迎长按下图关注公众号五分钟学算法,一起学算法。


    640?wx_fmt=jpeg


    来和程序员小吴一起学算法

    640?wx_fmt=gif


    我就知道你在看!
  • 相关阅读:
    Linux用户管理
    chattr&lsattr
    repo 回退当前分支下所有仓库到指定日期前的最新代码版本
    grep
    awk
    vscode sftp插件的使用
    程序的链接
    ZJOI2015 诸神眷顾的幻想乡
    BZOJ3756 Pty的字符串
    HDU1506 Largest Rectangle in a Histogram
  • 原文地址:https://www.cnblogs.com/csnd/p/16675386.html
Copyright © 2020-2023  润新知