1 / 17
文档名称:

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

格式:doc   大小:541KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:wxc6688 2020/1/27 文件大小:541 KB

下载得到文件列表

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

相关文档

文档介绍

文档介绍:[专题]辗转相除法求最大公约数和最小公倍数及其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)