three gcd algorithms