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

扩展欧几里得算法学习记

时间:2016-09-06 23:03:51      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

  话说以前我刷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……

 

扩展欧几里得算法学习记

标签:

原文地址:http://www.cnblogs.com/lcf-2000/p/5847387.html

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