码迷,mamicode.com
首页 > 编程语言 > 详细

总结——数论:欧几里得算法&扩展欧几里得证明

时间:2018-02-18 00:22:32      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:就是   处理   个人   splay   整数   存在   最大公约数   代码   除法   

一 欧几里得辗转相除法算法

  设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),又因 r = a mod b,所以 gcd(a,b)=gcd(b,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|r

    又因 a=r+kb ,所以 d 为 a 的因子,即 d|a ,因此 d 是 a,b 的公约数。

    综上,(a,b) 和 (b,a mod b) 的公约数一样,其最大公约数必然相等。

 

二 扩展欧几里得算法

  如果 gcd(a,b)=d , 那么一定存在整数 x,y 满足 ax+by=d.

  个人并未在网上搜到关于如上定理的严格证明,大多的关注点是求 x,y 的值。注意因为这是一个不定方程,所以解不只有一组。如果大家有相关证明可以留言讨论。x,y 值的求解:

    设存在 ax+by=gcd(a,b)

    根据欧几里得定理 gcd(a,b)=gcdb,mod b) ,

    可得 ax+bgcd(a,bgcd(b,mod bbx+(mod b)y′ = bx+(a?b?[a/b])y′ = ay‘ +b(x‘ - [a/b]y‘)

    由恒等定理可知,x=y‘ 
            y=x‘ - [a/b] y‘

  可以看到,x,y 的值由 x‘,y‘ 得出。而 x‘,y‘ 又如何得到?

  重新来看看我们得到的两个等式。x 和 y 是 gcd(a,b)=ax+b的解,而 x’ 和 y’ 是在对 gcd(a,b按欧几里德算法进行一步后的结果对应的贝祖等式 gcd(b,mod b)=bx+(mod b)y′ 的解。也就是说,gcd(a,b对应的贝祖等式的解 x,y 可以由 gcd(b,mod b对应等式的解x’,y’计算得出。

  由于欧几里德算法最后一步为 gcd(d,0)=d,此时对应等式存在解 x=1,y=0, 因此只要如上述代码,从 gcd(d,0往前处理,在进行欧几里德算法的递归的时候根据相邻两次调用间 x,y 和 x’,y’ 的关系计算即可求出 ax+by=gcd(a,b的解。

  更进一步,对于任意不定式ax+by=c,只需要在等式ax+by=gcd(a,b)=d两边乘上c/d即可得到解为x=x?c/d,y=y?c/d

 

总结——数论:欧几里得算法&扩展欧几里得证明

标签:就是   处理   个人   splay   整数   存在   最大公约数   代码   除法   

原文地址:https://www.cnblogs.com/travelller/p/8452373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!