欧几里德算法及其扩展.doc

欧几里德算法及其扩展.doc

ID:55915877

大小:30.00 KB

页数:10页

时间:2020-06-14

欧几里德算法及其扩展.doc_第1页
欧几里德算法及其扩展.doc_第2页
欧几里德算法及其扩展.doc_第3页
欧几里德算法及其扩展.doc_第4页
欧几里德算法及其扩展.doc_第5页
资源描述:

《欧几里德算法及其扩展.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、欧几里德与扩展欧几里德算法欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明:a可以表示成a=kb+r,则r=amodb  假设d是a,b的一个公约数,则有  d

2、a,d

3、b,而r=a-kb,因此d

4、r  因此d是(b,amodb)的公约数  假设d是(b,amodb)的公约数,则  d

5、b,d

6、r,但是a=kb+r  因此d也是(a,b)的公约数  因此(a,

7、b)和(b,amodb)的公约数是一样的,其最大公约数也必然相等,得证第二种证明:要证欧几里德算法成立,即证:gcd(a,b)=gcd(b,r),其中gcd是取最大公约数的意思,r=amodb下面证gcd(a,b)=gcd(b,r)设c是a,b的最大公约数,即c=gcd(a,b),则有a=mc,b=nc,其中m,n为正整数,且m,n互为质数由r=amodb可知,r=a-qb其中,q是正整数,则r=a-qb=mc-qnc=(m-qn)cb=nc,r=(m-qn)c,且n,(m-qn)互质(假设n,m-qn不互质,则n=xd,m-q

8、n=yd其中x,y,d都是正整数,且d>1则a=mc=(qx+y)dc,b=xdc,这时a,b的最大公约数变成dc,与前提矛盾,所以n,m-qn一定互质)则gcd(b,r)=c=gcd(a,b)得证。算法的实现:最简单的方法就是应用递归算法,代码如下:1intgcd(inta,intb)2{3if(b==0)4returna;5return6gcd(b,a%b);7}代码可优化如下:1intgcd(inta,intb)2{3returnb?gcd(b,a%b):a;4}当然你也可以用迭代形式:1intGcd(inta,intb)

9、2{3while(b!=0)4{5  intr=b;6  b=a%b;7  a=r;8}9returna;10}扩展欧几里德算法基本算法:对于不完全为0的非负整数a,b,gcd(a,b)表示a,b的最大公约数,必然存在整数对x,y,使得gcd(a,b)=ax+by。证明:设a>b。  1,显然当b=0,gcd(a,b)=a。此时x=1,y=0;  2,ab!=0时  设ax1+by1=gcd(a,b);  bx2+(amodb)y2=gcd(b,amodb);  根据朴素的欧几里德原理有gcd(a,b)=gcd(b,amodb)

10、;  则:ax1+by1=bx2+(amodb)y2;  即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;  根据恒等定理得:x1=y2;y1=x2-(a/b)*y2;这样我们就得到了求解x1,y1的方法:x1,y1的值基于x2,y2. 上面的思想是以递归定义的,因为gcd不断的递归求解一定会有个时候b=0,所以递归可以结束。扩展欧几里德的递归代码:1intexgcd(inta,intb,int&x,int&y)2{3if(b==0)4{5x=1;6y=0;7returna;8}9in

11、tr=exgcd(b,a%b,x,y);10intt=x;11x=y;12y=t-a/b*y;13returnr;14}扩展欧几里德非递归代码:1intexgcd(intm,intn,int&x,int&y)2{3intx1,y1,x0,y0;4x0=1;y0=0;5x1=0;y1=1;6x=0;y=1;7intr=m%n;8intq=(m-r)/n;9while(r)10{11x=x0-q*x1;y=y0-q*y1;12x0=x1;y0=y1;13x1=x;y1=y;14m=n;n=r;r=m%n;15q=(m-r)/n;16

12、}17returnn;18}扩展欧几里德算法的应用主要有以下三方面:(1)求解不定方程;(2)求解模线性方程(线性同余方程);(3)求解模的逆元;(1)使用扩展欧几里德算法解决不定方程的办法:对于不定整数方程pa+qb=c,若cmodGcd(p,q)=0,则该方程存在整数解,否则不存在整数解。上面已经列出找一个整数解的方法,在找到p*a+q*b=Gcd(p,q)的一组解p0,q0后,p*a+q*b=Gcd(p,q)的其他整数解满足:p=p0+b/Gcd(p,q)*tq=q0-a/Gcd(p,q)*t(其中t为任意整数)至于pa+

13、qb=c的整数解,只需将p*a+q*b=Gcd(p,q)的每个解乘上c/Gcd(p,q)即可。在找到p*a+q*b=Gcd(a,b)的一组解p0,q0后,应该是得到p*a+q*b=c的一组解p1=p0*(c/Gcd(a,b)),q1=q0*(c/Gcd(a,b)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。