Skip to content

Another method added for GCD #1387

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Oct 22, 2019
38 changes: 31 additions & 7 deletions maths/greatest_common_divisor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,44 @@
"""


def gcd(a, b):
"""Calculate Greatest Common Divisor (GCD)."""
return b if a == 0 else gcd(b % a, a)
def greatest_common_divisor(a, b):
"""
Calculate Greatest Common Divisor (GCD).
>>> greatest_common_divisor(24, 40)
8
"""
return b if a == 0 else greatest_common_divisor(b % a, a)


"""
Below method is more memory efficient because it does not use the stack (chunk of memory).
While above method is good, uses more memory for huge numbers because of the recursive calls
required to calculate the greatest common divisor.
"""


def gcd_by_iterative(x, y):
"""
>>> gcd_by_iterative(24, 40)
8
>>> greatest_common_divisor(24, 40) == gcd_by_iterative(24, 40)
True
"""
while y: # --> when y=0 then loop will terminate and return x as final GCD.
x, y = y, x % y
return x


def main():
"""Call GCD Function."""
"""Call Greatest Common Divisor function."""
try:
nums = input("Enter two Integers separated by comma (,): ").split(",")
nums = input("Enter two integers separated by comma (,): ").split(",")
num_1 = int(nums[0])
num_2 = int(nums[1])
print(f"gcd({num_1}, {num_2}) = {gcd(num_1, num_2)}")
print(f"greatest_common_divisor({num_1}, {num_2}) = {greatest_common_divisor(num_1, num_2)}")
print(f"By iterative gcd({num_1}, {num_2}) = {gcd_by_iterative(num_1, num_2)}")
except (IndexError, UnboundLocalError, ValueError):
print("Wrong Input")
print("Wrong input")


if __name__ == "__main__":
Expand Down