最大公约数的两种求法

 
如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。 
这个有几种方法,下面是两种不错的方法:
(1)辗转相减法(求差判定法)
    如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.
如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4.
16-12=4,12-4=8,8-4=4.
C语言
/* 辗转相减求出最大公约数 */
     while(n!=m)
     {
          if(n>m)n=n-m;
          if(m>n)m=m-n;
     }
     /* 输出最大公约数 */
     printf("Max=%d",m);
  (2)辗转相除法.
 
  当两个数都较大时,采用辗转相除法比较方便.其方法是:
 
  以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
 
  例如:求4453和5767的最大公约数时,可作如下除法.
 
  5767÷4453=1余1314
 
  4453÷1314=3余511
 
  1314÷511=2余292
 
  511÷292=1余219
 
  292÷219=1余73
 
  219÷73=3
 
  于是得知,5767和4453的最大公约数是73.
 
  辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.
C语言

int gcd(int a,int b)

{

  int temp;

  if(a<b)/*交换两个数,使大数放在a上*/

  {

  temp=a;

  a=b;

  b=temp;

  }

  while(b!=0)/*利用辗除法,直到b为0为止*/

  {

  temp=a%b;

  a=b;

  b=temp;

  }

  return a;

}

阅读更多
文章标签: 语言 c
想对作者说点什么? 我来说一句

最大公约数的实例

2015年12月13日 2.42MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭