下载此文档

[专题]辗转相除法求最大公约数和最小公倍数及其c语言实现.doc


文档分类:通信/电子 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
[专题]辗转相除法求最大公约数和最小公倍数及其c语言实现辗转相除法又名欧几里德算法(Euclideanalgorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至3000年前。在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相减法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252=21×12;105=21×5);因为252?105=147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如21=5×105+(?2)×252。这个重要的等式叫做贝祖等式。简单的想法设两数为a、b(a>b),b最大公约数(a,b)的步骤如下:用b除a,得a=bq......r1(0?r1)。若r1=0,则(a,b)=b;若r1?0,则再用r1除b,得b=r1q......r2(0?r2).若r2=0,则(a,b)=r1,若r2?0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。原理及其详细证明设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=amodb为a除以b以后的余数,辗转相除法即是要证明gcd(a,b)=gcd(b,r)。第一步:令c=gcd(a,b),则设a=mc,b=nc第二步:根据前提可知r=a-kb=mc-knc=(m-kn)c第三步:根据第二步结果可知c也是r的因数第四步:可以断定m-kn与n互素【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数成为cd,而非c】从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。证毕。自然语言描述辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的:?b的余数,则gcd(a,b)=gcd(b,r),。另一种写法是:?b,令r为所得余数(0?r<b)若r=0,算法结束;b即为答案。:置a?b,b?r,并返回第一步。(程序框图)C语言程序实现#include<>#include<>intmain(){inta,b,temp;printf("Inputa,b:");scanf("%d%d",&a,&b);a=(int)fabs(a);b=(int)fabs(b);//确保下面运算时a和b大于0;if(a<b)

[专题]辗转相除法求最大公约数和最小公倍数及其c语言实现 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wxc6688
  • 文件大小541 KB
  • 时间2020-01-27