求最大公约数

1.辗转相除法(欧几里得法)

算法:

前提:设两数为a,b设a为被除数,b为除数,temp为余数,大数放在a中,小数放在b中;

①求a/b的余数temp;

②若temp=0则b为最大公约数;

③如果temp!=0则把b的值给a,temp的值给b;

④返回第二步;

int gcd(int a,int b)
{
    return (a%b==0)?b:gcd(b,a%b);        
}

2.更相减损术

其原理很简单:两个正整数a和b(a > b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。依次递归下去,直到两个数相等。这相等两个数的值就是所求最大公约数。

int gcd(int a,int b)
{
   if(a==b )
     return a;
   else if(a>b)
     return gcd(a-b,b);
   else if(a<b)
     return gcd(b-a,a);   
}

 

posted @ 2021-02-23 21:01  all-all  阅读(92)  评论(0)    收藏  举报