euclidean algorithm gcd proof