画圆的沙滩

亦简亦美

最大公约数

编程之美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;
}

posted on 2011-03-21 15:13  acmaru  阅读(136)  评论(0编辑  收藏  举报

导航