diff --git a/Maths/extended_euclidean_algorithm.py b/Maths/extended_euclidean_algorithm.py new file mode 100644 index 000000000..f5a3cc88e --- /dev/null +++ b/Maths/extended_euclidean_algorithm.py @@ -0,0 +1,51 @@ +# @Author: S. Sharma +# @Date: 2019-02-25T12:08:53-06:00 +# @Email: silentcat@protonmail.com +# @Last modified by: silentcat +# @Last modified time: 2019-02-26T07:07:38-06:00 + +import sys + +# Finds 2 numbers a and b such that it satisfies +# the equation am + bn = gcd(m, n) (a.k.a Bezout's Identity) +def extended_euclidean_algorithm(m, n): + a = 0; aprime = 1; b = 1; bprime = 0 + q = 0; r = 0 + if m > n: + c = m; d = n + else: + c = n; d = m + + while True: + q = int(c / d) + r = c % d + if r == 0: + break + c = d + d = r + + t = aprime + aprime = a + a = t - q*a + + t = bprime + bprime = b + b = t - q*b + + pair = None + if m > n: + pair = (a,b) + else: + pair = (b,a) + return pair + +def main(): + if len(sys.argv) < 3: + print('2 integer arguments required') + exit(1) + m = int(sys.argv[1]) + n = int(sys.argv[2]) + print(extended_euclidean_algorithm(m, n)) + +if __name__ == '__main__': + main()