辗转相除

节选自:(http://zhidao.baidu.com/question/5920943.html

若 a
=bq+r,则a和b的最大公因子等于b和r的最大公因子绝对值(都为整数) 

比如求4864和3458的最大公因子: 
4864=1*3458+1406 
3458=2*1406+646 
1406=2*646+114 
646=5*114+76 
114=1*76+38 
76=2*38+0 
所以4864和3458的最大公因子为38

自己跟据这个,写了个用辗转相除求两个数最大公因子的方法。

        int getIn(int a, int b)
        
{
            
if (b == 0return a;
            
return getIn(b, a % b);
        }


百度搜索了一下,果然还是别人的方法简单。

辗转相除递归算法:
//求最大公约数,公式if(a=b*q+r)then(gcd(a,b)=gcd(b,r))
int gcd(int a,int b)
{
    
return (a%b)?gcd(b,a%b):b;
}
非递归算法:
//非递归辗转相除
int gcd(int a,int b)
{
    
int r=0;
    r
=a%b;
    
while(r)
    
{
        a
=b;
        b
=r;
        r
=a%b;
    }

    
return b;
}
原文地址:https://www.cnblogs.com/zxsoft/p/940155.html