最大公约数
编程之美2.7节。解法三即stein算法。下面是其迭代式实现。
template<class T>
T gcdStein(T a, T b) {
for(T r = 1;;) {
if (!a) return r *= b;
if (!b) return r *= a;
T o1 = 0;
while (!(a&1)) a>>=1, ++o1;
T o2 = 0;
while (!(b&1)) b>>=1, ++o2;
r <<= min(o1, o2);
if (a == 1 || b == 1) return r;
if (a > b) a -= b;
else b -= a;
}
}
int main() {
int a, b;
while (cin>>a>>b)
cout<<gcdStein<int>(a, b)<<'\n';
return 0;
}
浙公网安备 33010602011771号