求最大公约数的原理及算法实现

求最大公约数的原理及算法实现

ID:43467501

大小:38.49 KB

页数:7页

时间:2019-10-03

求最大公约数的原理及算法实现_第1页
求最大公约数的原理及算法实现_第2页
求最大公约数的原理及算法实现_第3页
求最大公约数的原理及算法实现_第4页
求最大公约数的原理及算法实现_第5页
资源描述:

《求最大公约数的原理及算法实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.辗转相除法GCD算法的基本原理  DCD-GreatestCommonDivisor欧几里得定理:   若a=b*r+q,则GCD(a,b)=GCD(b,q)。证明:  假设c=GCD(a,b)   则存在m使得 a=m*c,b=n*c;  因为a=b*r+q,  则 q=a-b*r=m*c-n*c*r=(m-n*r)*c;   因为b=n*c,q=(m-n*r)*c  故要证明GCD(a,b)=GCD(b,q),即证明n与m-n*r互质   下面证明m-n×r与n互质:   假设不互质,则存在公约数k使得m-n*r=x*k,n

2、=y*k.   则:   a =m*c=(n*r+x*k)*c=(y*k*r+x*k)*c=(y*r+x)*k*c    b=n*c=y*c*k  则GCD(a,b)=k*c,与c=gcd(a,b)矛盾2.辗转相除法算法的实现2.1递归实现intGCD(inta,intb){    if(!b)         returna;     else         returnGCD(b,a%b); }自己改进intGCD(inta,intb){     if(!(a%b))         returnb;     else    

3、     returnGCD(b,a%b); }2.2迭代实现intGCD(inta,intb){intc=a%b;while(c)        {                a=b;b=c;c=a%b;}returnb;} 3.更相减损法更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。      《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等

4、数约之。”翻译成现代语言如下:第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。第二步:以较大的数减去较小的数,接着把所得的差与较小的数比较,并以大数减去小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。例如:用更相减损术求260和104的最大公约数。解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26

5、。此时65是奇数而26不是奇数,故把65和26辗转相减:65-26=3939-26=1326-13=13所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。2.更相减损法算法的实现2.1递归实现#include intmain(void){  intnum=0,result,a,b;  scanf("%d%d",&a,&b);   while(!(a%2)&&!(b%2))   {     num++;     a/=2;     b/=2;  }   result=pow(2,

6、num)*GCD(a,b);  printf("GCD:%d",result);  return0;} intGCD(inta,intb){  if(a>b)  {     if((a-b)==b)        returnb;     else        returnGCD(b,a-b);   }  else  {     if((b-a)==a)        returna;     else        returnGCD(a,b-a);   }}2.2迭代实现#includeintmain(v

7、oid){  intnum=0,result,a,b;  scanf("%d%d",&a,&b);  while(!(a%2)&&!(b%2))   {     num++;     a/=2;     b/=2;  }   result=pow(2,num)*GCD(a,b);  printf("GCD:%d",result);  return0;}intGCD(inta,intb){  if(a

8、if((a-b)>b)         a=a-b;     else     {        a=b;        b=a-b;      }   }returnb;} 3.辗转相除法与更相减损术的区别(1)都是求最大公因数的方

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

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

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