ха ха ха http://en.wikipedia.org/wiki/Binary_GCD_algorithm ...
define even(m) хз !(m%2) или !(m&1) лучше
// m > 0 && n > 0
typedef long long ll
ll gcd_stein(ll m,ll n){// m>0,n>0 //prerec !!!!
int d_m = 0,d_n=0;
while (even(m)) { m >>= 1; ++d_m;}
while (even(n))) { n >>= 1; ++d_n;}
// odd(m) && odd(n)
while (m != n) {
if (n > m) swap(n, m);
m -= n;do m >>= 1; while (even(m));
}
// m == n
return m << min(d_m, d_n);
}
/*
if (n > m){m -= n;do m >>= 1; while (even(m));
} else {n -= m;do n >>= 1; while (even(n));
}
*/
...