欧几里德与扩展算法-jumping frog博客园.pdfVIP

欧几里德与扩展算法-jumping frog博客园.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

jumping_frog

欧欧几几里德与扩展欧几里德算法与扩展里德算

欧几里德算法

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。

基本算法:设a=qb+r,其中a,b,q,r都是整数,则(a,b)=(b,r),即(a,b)=(b,a%b)。

第一种证明

a可以表示成a=kb+r,则r=amodb

假设d是a,b的一个公约数,则有

d|a,d|b,而r=a-kb,因此d|r

因此d是(b,amodb)的公约数

假设d是(b,amodb)的公约数,则

d|b,d|r,但是a=kb+r

因此d也是(a,b)的公约数

因此(a,b)和(b,amodb)的公约数是一样的,其最大公约数也必然相等,得证

第二种证明

要证欧几里德算法成立,即证:(a,b)=(b,r),其中是取最大公约数的意思,r=amodb

下面证(a,b)=(b,r)

设c是a,b的最大公约数,即c=(a,b),则有a=mc,b=nc,其中m,n为正整数,且m,n互为质数

由r=amodb可知,r=a-qb其中,q是正整数,

则r=a-qb=mc-qnc=(m-qn)c

b=nc,r=(m-qn)c,且n,(m-qn)互质(假设n,m-qn不互质,则n=xd,m-qn=yd其中x,y,d都是正整数,且d1

则a=mc=(qx+y)dc,b=xdc,这时a,b的最大公约数变成dc,与前提,

所以n,m-qn一定互质)

则(b,r)=c=(a,b)

得证。

算法的实现

最简单的方法就是应用递归算法,代码如下

ViewCode

1int(inta,intb)

2{

3if(b==0)

4returna;

5return

6(b,a%b);

7}

代码可优化如下

ViewCode

1int(inta,intb)

2{

3returnb?(b,a%b):a;

4}

当然你也可以用迭代形式

ViewCode

1int(inta,intb)

2{

3while(b!=0)

4{

5intr=b;

1/8

6b=a%b;

7a=r;

8}

9returna;

10}

扩展欧几里德算法

基本算法:对于不完全为0的非负整数a,b,(a,b)表示a,b的最大公约数,必然存在整数对x,y,使得

(a,b)=ax+by。

证明:设ab。

1,显然当b=0,(a,b)=a。此时x=1,y=0;

2,ab!=0时

设ax1+by1=(a,b);

bx2+(amodb)y2=(b,amodb);

根据朴素的欧几里德原理有(a,b)=(b,amodb);

则:ax1+by1=bx2+(amodb)y2;

即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;

根据恒等

文档评论(0)

152****8708 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档