基本原理是辗转相除法,具体原理请点击链接:辗转相除法
第一种:
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;//三次异或交换数值
}