diff --git a/discrete_mathematics/exteded_euclidean_algorithm.rb b/discrete_mathematics/exteded_euclidean_algorithm.rb new file mode 100644 index 0000000..8b7c17d --- /dev/null +++ b/discrete_mathematics/exteded_euclidean_algorithm.rb @@ -0,0 +1,31 @@ +# https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm + +def extended_euclidean_gcd(a, b) + + x0, x1 = a, b + s, t = 1, 0 + until x1.zero? + q, x2 = x0.divmod(x1) + x0, x1 = x1, x2 + s, t = t, s - q * t + end + gcd = x0 + return gcd +end + +puts "GCD(3, 5) = " + extended_euclidean_gcd(3, 5).to_s +# GCD(3, 6) = 3 +puts "GCD(3, 6) = " + extended_euclidean_gcd(3, 6).to_s +# GCD(3, 6) = 3 +puts "GCD(6, 3) = " + extended_euclidean_gcd(6, 3).to_s +# GCD(6, 3) = 3 + +=begin + +Dynamic driver code: + +a = gets.to_i +b = gets.to_i +puts "GCD (#{a}, #{b} ) = #{extended_euclidean_gcd(a, b)}" + +=end