2021-01-22 13:38:45 +05:30
|
|
|
# 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
|
2021-01-25 22:13:23 +05:30
|
|
|
# GCD(3, 5) = 1
|
2021-01-22 13:38:45 +05:30
|
|
|
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
|