最大公约数
最大公约数,根据《编程之美》递归版写的非递归版:
1. 对于y和x来说,如果y=k*y1, x = k * x1。那么有gcd(y,x)=k*gcd(y1, x1);
2. 如果x=p*x1, p是素数(质数),并且y%p != 0,那么gcd(x, y) = gcd(p * x1, y) = gcd(x1, y)。
1 int gcd(int x, int y) { 2 int a = x, b = y; 3 int factor = 0; 4 while (a != 0 && b != 0) { 5 if (a < b) { 6 swap(a, b); 7 } 8 if (a & 0x01 == 0) { 9 if (b & 0x01 == 0) { 10 b >>= 1; 11 factor++; 12 } 13 a >>= 1; 14 } else { 15 if (b & 0x01 == 0) { 16 b >>= 1; 17 } else { 18 a -= b; 19 } 20 } 21 } 22 if (a == 0) return b << factor; 23 if (b == 0) return a << factor; 24 }