美文网首页
Euclid GCD算法原理

Euclid GCD算法原理

作者: dodorado | 来源:发表于2022-10-07 16:56 被阅读0次

[转载于] https://thiscute.world/posts/mathematics-in-euclidean-gcd/

很早就学过欧几里得算法,但是一直不知道它的原理。几乎每本算法书都会提到它,但是貌似只有数学书上才会见到它的原理。。。前段时间粗粗看了点数论(《什么是数学》),惊讶于这个原理的奇妙。现在把它通俗地写下来,以免自己忘记。欧几里得算法是求两个数的最大公约数(Greatest Common Divisor (GCD))的算法,我们首先假设有两个数 ab,其中 a 是不小于 b 的数,记 ab 除的余数为 r,那么 a 可以写成这样的形式:
a = bq + r 其中 q 是整数(我们不需要去管 q 到底是多少,这和我们的目标无关)。现在假设 ab 的一个约数为 u,那么 ab 都能被 u 整除,即
a = su b = tu st 都是整数(同样的,我们只需要知道存在这样的整数 st 就行)。这样可以得出
r = a - bq = su - (tu)q = (s - tq)u 所以 r 也能被 u 整除,一般规律如下

ab 的约数也整除它们的余数 r,所以 ab 的任一约数同时也是 br 的约数。 —— 条件一

反过来可以得出

br 的任一约数同时也是 ab 的约数。 ——条件二

这是因为对 br 每一个约数 v,有
b = kv r = cv 于是有
a = bq + r = (kv)q + cv = (kq + c)v 由条件一和条件二可知

ab 的约数的集合,全等于 br 的约数的集合。

于是

ab 的最大公约数,就是 br 的最大公约数。

接下来用递推法,
a \div br,现在设
b \div rr_1
r \div r_1r_2
……
r_{n-3} \div r_{n-2}r_{n-1}
r_{n-2} \div r_{n-1}r_n=0

因为 a \ge b,可以看出余数 r_n 会越来越小,最终变成 0.
r_{n-1} \neq 0r_n = 0 时,可知 r_{n-2} 可被 r_{n-1} 整除(余数为 0 嘛)
此时 r_{n-2}r_{n-1} 的约数就只有:r_{n-1}r_{n-1} 的因数,
所以他们的最大公约数就是 r_{n-1}
所以 r_{n-1} 就是 ab 的最大公约数。(若 r = 0,则 b 为最大公约数)

这个递推法写成c语言函数是这样的(比推导更简洁…):

unsigned int Gcd(unsigned int M,unsigned int N){
    unsigned int Rem;
    while(N){
        Rem = M % N;
        M = N;
        N = Rem;
    }
    return Rem;
}

可以发现这里没有要求 M>=N,这是因为如果那样,循环会自动交换它们的值。

P.S. 此外,还有最小公倍数(Least Common Multiple (LCM))算法,详见 GCD and LCM calculator

相关文章

  • Euclid GCD算法原理

    [转载于] https://thiscute.world/posts/mathematics-in-euclide...

  • 欧几里得算法(辗转相除法)最大公约数

    欧几里得算法原理 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。gcd(a,b)=gcd(b,a...

  • 欧几里得算法【Euclid Algorithm】

    引言 欧几里得算法用于求两整数的最大公约数,是一个简单却经典的算法,很多算法或者数论领域的入门书都将它作为引子。 ...

  • 算法学习(1)----扩展欧几里得算法

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd...

  • 多线程与GCD执行原理

    多线程与GCD执行原理 GCD 含义 可以生成必要的线程并计划执行任务 实现原理 GCD有一个底层线程池,这个池中...

  • Today面试

    Runloop 底层原理Kvo 底层原理ARC 底层原理 如何实现GCD 底层原理Block 底层原理Aut...

  • CSI讲义9: GCD算法

    本文简介求两个整数的最大公因子的GCD算法,并作简要分析。目标:让大一新生建立起关于算法的若干概念。 GCD算法 ...

  • 19年目标

    GCD、NSOperation、Block原理消息转发runtime

  • ios笔试的补充

    1.GCD和NSOperation的工作原理GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排...

  • 路径规划文集

    1、最短路径规划算法——A*算法 1)A*算法原理形象阐释; 2)A*算法原理;

网友评论

      本文标题:Euclid GCD算法原理

      本文链接:https://www.haomeiwen.com/subject/erebartx.html