2020-05-25 10:32:57 +00:00
|
|
|
""" https://en.wikipedia.org/wiki/Euclidean_algorithm """
|
2017-10-01 12:50:45 +00:00
|
|
|
|
2019-10-05 05:14:13 +00:00
|
|
|
|
2020-05-25 10:32:57 +00:00
|
|
|
def euclidean_gcd(a: int, b: int) -> int:
|
|
|
|
"""
|
|
|
|
Examples:
|
|
|
|
>>> euclidean_gcd(3, 5)
|
|
|
|
1
|
|
|
|
|
|
|
|
>>> euclidean_gcd(6, 3)
|
|
|
|
3
|
|
|
|
"""
|
2017-10-01 12:50:45 +00:00
|
|
|
while b:
|
2020-05-25 10:32:57 +00:00
|
|
|
a, b = b, a % b
|
2017-10-01 12:50:45 +00:00
|
|
|
return a
|
|
|
|
|
2019-10-05 05:14:13 +00:00
|
|
|
|
2020-05-25 10:32:57 +00:00
|
|
|
def euclidean_gcd_recursive(a: int, b: int) -> int:
|
|
|
|
"""
|
|
|
|
Recursive method for euclicedan gcd algorithm
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
>>> euclidean_gcd_recursive(3, 5)
|
|
|
|
1
|
|
|
|
|
|
|
|
>>> euclidean_gcd_recursive(6, 3)
|
|
|
|
3
|
|
|
|
"""
|
|
|
|
return a if b == 0 else euclidean_gcd_recursive(b, a % b)
|
|
|
|
|
|
|
|
|
2017-10-01 12:50:45 +00:00
|
|
|
def main():
|
2020-05-25 10:32:57 +00:00
|
|
|
print(f"euclidean_gcd(3, 5) = {euclidean_gcd(3, 5)}")
|
|
|
|
print(f"euclidean_gcd(5, 3) = {euclidean_gcd(5, 3)}")
|
|
|
|
print(f"euclidean_gcd(1, 3) = {euclidean_gcd(1, 3)}")
|
|
|
|
print(f"euclidean_gcd(3, 6) = {euclidean_gcd(3, 6)}")
|
|
|
|
print(f"euclidean_gcd(6, 3) = {euclidean_gcd(6, 3)}")
|
|
|
|
|
|
|
|
print(f"euclidean_gcd_recursive(3, 5) = {euclidean_gcd_recursive(3, 5)}")
|
|
|
|
print(f"euclidean_gcd_recursive(5, 3) = {euclidean_gcd_recursive(5, 3)}")
|
|
|
|
print(f"euclidean_gcd_recursive(1, 3) = {euclidean_gcd_recursive(1, 3)}")
|
|
|
|
print(f"euclidean_gcd_recursive(3, 6) = {euclidean_gcd_recursive(3, 6)}")
|
|
|
|
print(f"euclidean_gcd_recursive(6, 3) = {euclidean_gcd_recursive(6, 3)}")
|
2017-10-01 12:50:45 +00:00
|
|
|
|
2019-10-05 05:14:13 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2017-10-01 12:50:45 +00:00
|
|
|
main()
|