浅谈如何的设计算法求最大公约数.docVIP

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

浅谈如何的设计算法求最大公约数   算法作为高中数学新增内容,受到老师和同学们的普遍关注.本文就教材《算法案例》一节中的一个案例“写出求两个正整数a,b(ab)的最大公约数的一个算法”,谈一谈求最大公约数的多种算法设计.笔者希望通过本文能使同学们体会到算法思想已经渗透到人们生活与生产的方方面面.    一、 欧几里得算法   欧几里得算法又称为辗转相除法,可谓求两个数的最大公约数的经典算法,首次出现于公元前3世纪欧几里得《几何原本》,是目前已知的最古老的算法.   对于a,b∈N*且ab,若a可以表示成a=nb+r,n∈N*,0≤r≤b,则r=mod(a,b),假设d是a,b的一个公约数,则0=mod(a,d),0=mod(b,d),又r=a-nb,所以0=mod(r,d),即d是b,r的公约数;反之,可得,若d是b,r的公约数,则d也是a,b的公约数.   据此,欧几里得辗转相除法求两个正整数a,b(ab)的最大公约数的算法为:   S1 输入两个正整数a,b(ab,下略);   S2 如果mod(a,b)≠0,那么转S3,否则转S6;   S3 r←mod(a,b);   S4 a←b;   S5 b←r,转S2;   S6 输出b.   例如,求204与85的最大公约数可以如图1所示:   图1   伪代码与流程图如图2、图3所示:   我国的“更相减损术”与“辗转相除法”有异曲同工之妙,只是把除法化为了多次的减法.在《九章算术》卷一方田章中说:“约分术曰:可半者半之,不可半者付置分母分子之数,以少减多,更相减损,求其等也.以等数约之.”意思是:如果分母、分子都是偶数,那么先除以2;如果不全是偶数,便将分子分母互减,以少减多,直至两数相等(相减为0),便得出最大公约数;用最大公约数去约分子分母,便可使分数最简.   例如,求204与85的最大公约数可以如图4所示:   可以看出,欧几里得算法将求余的次数辗转迭代,使得该算法相当高效直观,算不算效率之致呢?    二、 Stein算法   德国数学家J. Stein 1961年提出了Stein算法,作为欧几里得算法的一个扩展,其基本思想是约简转化,然后运用减法运算代替欧几里得算法中的求余运算,后面的减法运算又类似“更相减损术”.   首先我们得了解如下事实:一个奇数的所有约数都是奇数;一个数和它自身的最大公约数是其自身;两个数都乘k后的最大公约数为原两个数的最大公约数的k倍.最后一个事实是Stein算法的核心所在,如取k=2,我们可以很快联想到将两个偶数化小的方法.   因此,我们可以给出求两个正整数a,b(ab)的最大公约数的Stein算法:   S1 i←0;   S2 如果a和b都是偶数,则a←,b←,i←i+1;   S3 如果a和b仍都是偶数,转S2;   S4 如果a是偶数,b是奇数,则a←;   S5 如果a仍是偶数,转S4;   S6 如果a是奇数,b是偶数,则b←;   S7 如果b仍是偶数,转S6;   S8 如果a和b都是奇数,则,a←b,b←|a-b|;   S9 如果b≠0,转S6;   S10 d←2ia,输出d.   例如,求204与85的最大公约数可以如图5所示:   流程图限于篇幅,恕不赘述.同学们若有兴趣可以自己动笔尝试.   容易看出,Stein算法中偶数的约简也重复多次,为什么J. Stein要多此一举呢?这主要是为较大的数的计算考虑的,较大的数的求余运算相对来说困难一些,而除以2约简后就容易操作的多了.   以上两种算法,均属大师经典之作,其效率之高可想而知.而在计算机高速发展的今天,简单的重复、迭代、递归等运算对于计算机而言可谓小菜一碟,所以我们也别忘了还有人类最原始,最直接的算法.为此,我们首先回顾一下基本概念:整除、约数、公约数等.   若整数a除以大于0的整数b,商为整数,且余数为零,我们就说a能被b整除(或说b能整除a),记作b|a,读作“b整除a”或“a能被b整除”或“b是a的约数”.对于正整数a,b,如果存在正整数d,使得,d|a,d|b,则称d为a和b的公约数.公约数中最大的一个就称为最大公约数.    三、 穷举法   不言而喻,一个一个地找是最稳定的做法,虽然这对于人类手动能力来说可能是鞭长莫及,但是算法最终是由计算机执行的,而计算机处理数据的速度是很快的,所以我们才可以采取这种老套却实用的办法.怎么找呢?若从1开始以步长1为递增,则最后难免有诸多约数出现;若要避免临时储存,倒不如从两个数中较小的数开始以-1为步长递减,每减少1就用两个数去除,当余数均为0时,那个计数变量的值即为所求的最大公约数.此方法不需要有厚实数学基础,只要有简单的

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档