美文网首页
欧几里得算法(最大公因数)

欧几里得算法(最大公因数)

作者: kylinxiang | 来源:发表于2017-06-04 01:45 被阅读209次

问题##

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。例如,gcd(50,15)=5。


证明##

其计算原理依赖于下面的定理:
定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。
gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

证法一###

a可以表示成a = kb + r(a,b,k,r皆为正整数,且r<b),则r = a mod b
假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。
而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数,因此d|r
因此d也是b,a mod b的公约数
假设d是b,a mod b的公约数, 则d|b,d|(a-k*b),k是一个整数,
进而d|a.因此d也是a,b的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

证法二###

第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:可以断定m-kn与n互素【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数≥cd,而非c,与前面结论矛盾】
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r),得证
注意:两种方法是有区别的。


代码##

    public static long gcd(long m, long n) {
        while (n != 0) {
            long rem = m % n;
            m = n;
            n = rem;
        }
        return m;
    }

分析##

如代码所示的算法计算gcd(M,N),假设M>=N(如果N>M,则循环的第一次迭代,将他们互相交换)。算法连续计算余数直到余数是0为止,最后的非0余数就是最大公因数。因此,如果M=1989和N=1590,则余数序列为399,393,6,3,0。从而,gcd(1989,1590)=3。正如序列所表明的,这是一个快速算法。

估计算法的整个运行时间依赖于确定余数序列究竟有多长。显然logN看似像理想中的答案,但是根本看不出余数的值按照常数因子递减的必然性,因为我们看到余数从399仅仅降到393.事实上,在一次迭代中余数并不按照一个常数因子递减。然而,我们可以证明,在两次迭代后,余数最多是原始值得一半。

证明如果M>N,则M mod N < M/2如下:
存在两种情形。如果M<=M/2,则由于余数小于N,故定理在这种情况下一定成立。另一种情形则是M>M/2。但是此时M仅仅含有一个N,从而余数为M-N<M/2,定理得证。所以时间复杂度为O(logN)。

相关文章

  • 程序设计-求最大公因数

    程序设计-求最大公因数 本文使用欧几里得算法来求最大公因数。 最大公因数:能够同时整除两个整数的最大整数。 即,1...

  • 欧几里得算法——计算最大公因数

    计算最大公因数的欧几里得算法 最大公因数 最大公因数,也称最大公约数,指两个或多个整数共有约数中最大的一个。a,b...

  • 欧几里得算法(最大公因数)

    问题## 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。例如,gcd(50,15)=5。 证明...

  • 辗转相除法求最大公因数 2020-03-12

    今天做了一道题,需要求最大公因数,已经完全把辗转相除法忘记了,特此记录 辗转相除法 辗转相除法,也叫欧几里得算法,...

  • 扩展欧几里得算法

    资料 欧几里得算法 扩展欧几里得算法 扩展欧几里得算法应用 欧几里得算法 欧几里得算法用于求两个数的最大公约数 证...

  • GCD最大公因数

    GCD最大公因数

  • 【教学随笔】最大公因数

    教学过程 1.看到课题,有什么问题? 最大公因数怎么求? 公因数是什么? 最大公因数和因数有什么关系? 2.什么是...

  • GCD欧几里得算法 & EXGCD扩展欧几里得算法

    欧几里得算法欧几里得算法 (Euclidean algorithm) 是用来解决最大公约数问题的,通常采用辗转相除...

  • 欧几里德算法

    需求: 计算最大公因数。两个整数德最大公因数(Gcd)是同时整除二者的最大整数。 算法通过连续计算余数直到余数是0...

  • 数论——欧几里得算法

    欧几里得算法 介绍 【欧几里得算法】又名辗转相除法,是求最大公约数的算法。两个整数的最大公约数是能够同时整除它们的...

网友评论

      本文标题:欧几里得算法(最大公因数)

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