Skip to content

Commit beae2fd

Browse files
committed
Add extended euclidean algorithm
1 parent c5b4bc6 commit beae2fd

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# a = b * q + r
2+
def gcd(a, b):
3+
if b == 0:
4+
return (a, 1, 0)
5+
6+
a = abs(a)
7+
b = abs(b)
8+
if(b > a):
9+
a, b = b, a
10+
11+
old_a_coef = 1
12+
old_b_coef = 0
13+
current_a_coef = 0
14+
current_b_coef =1
15+
16+
while (a % b) > 0:
17+
q = a // b
18+
new_a_coef = old_a_coef - current_a_coef * q
19+
new_b_coef = old_b_coef - current_b_coef * q
20+
old_a_coef = current_a_coef
21+
old_b_coef = current_b_coef
22+
current_a_coef = new_a_coef
23+
current_b_coef = new_b_coef
24+
25+
r = a % b
26+
a = b
27+
b = r
28+
return (b, current_a_coef, current_b_coef)
29+
30+
def main():
31+
a = int(input("Enter first number: "))
32+
b = int(input("Enter second number: "))
33+
result, a_mult, b_mult = (gcd(a, b))
34+
print("GCD is:", result, "\nlinear combination:", result, "=", a, "*", a_mult,"+", b, "*", b_mult)
35+
36+
if __name__ == "__main__":
37+
main()

0 commit comments

Comments
 (0)