GCD的两种简单写法

基本原理是辗转相除法,具体原理请点击链接:辗转相除法

第一种:

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

 

如果b == 0,就直接输出a;如果b != 0,gcd(b, a%b),直至b == 0。

第二种:

int gcd(int a, int b)
{
    while(b^=a^=b^=a%=b);
    return a;
}

这里进行了三次异或运算交换了两数的数值。

我们把while语句展开:

while(b > 0)
{
    a = a%b;//求出余数赋值给a
    b = b^a;
    a = a^b;
    b = b^a;//三次异或交换数值
}

 

你可能感兴趣的:(GCD)