1.欧几里得算法
long gcd(long a, long b) {
while (b) {
long t = a%b;
a = b;
b = t;
}
return a;
}
2.减法
long gcd(long a, long b) {
if (a == 0)
return b;
while (b) {
if (a > b)
a -= b;
else
b -= a;
}
return a;
}
3.递归
long gcd(long a, long b) {
if (b > 0)
return gcd(b, a%b);
else
return a;
}
4.位运算
long gcd(long a, long b){
while (b ^= a ^= b ^= a %= b);
return a;
}
等价于:
long gcd(long a, long b) {
while (b) {
a %= b;
//swap(a, b);
b = a^b;
a = a^b;
b = a^b;
}
return a;
}