扩展欧几里得算法学习记

Posted lcf2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展欧几里得算法学习记相关的知识,希望对你有一定的参考价值。

  话说以前我刷noip题的时候就想学这个东西了,结果却一直拖到了现在……

  到了高二才会这种东西的我实在是个蒟蒻啊!

  将扩展欧几里得算法之前,先讲讲欧几里得算法是什么:gcd(a,b)=gcd(b,a%b)。很显然是不?但我们还是要给出证明(设r=a%b):

  设x是a,b的一个公约数,由于存在k使得a=k*b+r,又由于a|x,b|x,则有r|x,所以x是b,r的公约数

  设x是b,r的一个公约数,因为存在k使得a=k*b+r,且b|x,r|x,那么a|x,所以x是a,b的公约数

  综上所述,a和b的所有公约数 等于 b和a%b的所有公约数,于是得证。

 

  所以,扩展欧几里得算法又是什么呢?这个算法就是用来求出整数解x,y,使得gcd(a,b)=a*x+b*y。

  那么,如何求呢(用到的除号皆为整除,即1/3=0,6/4=1)?

  ①显然当b=0时有:x=1,y=0

  ②设r=a%b,有r=a-(a/b)*b

    由于gcd(a,b)=a*x+b*y=gcd(b,r)

    又因为gcd(b,r)=b*x1+r*y1

    于是有a*x+b*y = b*x1+r*y1 = b*x1+(a-(a/b)*b)*y1 = y1*a+(x1-(a/b)*b)*b

    所以x=y1,y=x1-(a/b)*b

    递归地求下去即可

 

  待更ing……

 

以上是关于扩展欧几里得算法学习记的主要内容,如果未能解决你的问题,请参考以下文章

欧几里得算法与扩展算法相关内容

扩展欧几里得算法的模板实现

省选算法学习-BSGS与exBSGS

拓展欧几里德算法学习记录

[长期更新]模板&算法学习情况

Gcd&Exgcd算法