8
8
def greatest_common_divisor (a : int , b : int ) -> int :
9
9
"""
10
10
Calculate Greatest Common Divisor (GCD) using Euclidean algorithm recursively.
11
-
11
+
12
12
The GCD of two integers is the largest positive integer that divides both numbers.
13
-
13
+
14
14
Args:
15
15
a: First integer
16
16
b: Second integer
17
-
17
+
18
18
Returns:
19
19
The greatest common divisor of a and b
20
-
20
+
21
21
Examples:
22
22
Basic cases:
23
23
>>> greatest_common_divisor(24, 40)
@@ -28,7 +28,7 @@ def greatest_common_divisor(a: int, b: int) -> int:
28
28
25
29
29
>>> greatest_common_divisor(17, 19)
30
30
1
31
-
31
+
32
32
Edge cases with small numbers:
33
33
>>> greatest_common_divisor(1, 1)
34
34
1
@@ -40,15 +40,15 @@ def greatest_common_divisor(a: int, b: int) -> int:
40
40
1
41
41
>>> greatest_common_divisor(16, 4)
42
42
4
43
-
43
+
44
44
Cases with zero:
45
45
>>> greatest_common_divisor(0, 5)
46
46
5
47
47
>>> greatest_common_divisor(5, 0)
48
48
5
49
49
>>> greatest_common_divisor(0, 0)
50
50
0
51
-
51
+
52
52
Negative numbers:
53
53
>>> greatest_common_divisor(-3, 9)
54
54
3
@@ -62,19 +62,19 @@ def greatest_common_divisor(a: int, b: int) -> int:
62
62
8
63
63
>>> greatest_common_divisor(-48, 18)
64
64
6
65
-
65
+
66
66
Large numbers:
67
67
>>> greatest_common_divisor(1071, 462)
68
68
21
69
69
>>> greatest_common_divisor(12345, 54321)
70
70
3
71
-
71
+
72
72
Same numbers:
73
73
>>> greatest_common_divisor(42, 42)
74
74
42
75
75
>>> greatest_common_divisor(-15, -15)
76
76
15
77
-
77
+
78
78
One divides the other:
79
79
>>> greatest_common_divisor(15, 45)
80
80
15
@@ -87,17 +87,17 @@ def greatest_common_divisor(a: int, b: int) -> int:
87
87
def gcd_by_iterative (x : int , y : int ) -> int :
88
88
"""
89
89
Calculate Greatest Common Divisor (GCD) using iterative Euclidean algorithm.
90
-
90
+
91
91
This method is more memory efficient because it does not create additional
92
92
stack frames for recursive function calls.
93
-
93
+
94
94
Args:
95
95
x: First integer
96
96
y: Second integer
97
-
97
+
98
98
Returns:
99
99
The greatest common divisor of x and y
100
-
100
+
101
101
Examples:
102
102
Basic cases:
103
103
>>> gcd_by_iterative(24, 40)
@@ -108,15 +108,15 @@ def gcd_by_iterative(x: int, y: int) -> int:
108
108
25
109
109
>>> gcd_by_iterative(17, 19)
110
110
1
111
-
111
+
112
112
Verify equivalence with recursive version:
113
113
>>> greatest_common_divisor(24, 40) == gcd_by_iterative(24, 40)
114
114
True
115
115
>>> greatest_common_divisor(48, 18) == gcd_by_iterative(48, 18)
116
116
True
117
117
>>> greatest_common_divisor(100, 25) == gcd_by_iterative(100, 25)
118
118
True
119
-
119
+
120
120
Edge cases with small numbers:
121
121
>>> gcd_by_iterative(1, 1)
122
122
1
@@ -126,15 +126,15 @@ def gcd_by_iterative(x: int, y: int) -> int:
126
126
1
127
127
>>> gcd_by_iterative(16, 4)
128
128
4
129
-
129
+
130
130
Cases with zero:
131
131
>>> gcd_by_iterative(0, 5)
132
132
5
133
133
>>> gcd_by_iterative(5, 0)
134
134
5
135
135
>>> gcd_by_iterative(0, 0)
136
136
0
137
-
137
+
138
138
Negative numbers:
139
139
>>> gcd_by_iterative(-3, -9)
140
140
3
@@ -148,19 +148,19 @@ def gcd_by_iterative(x: int, y: int) -> int:
148
148
8
149
149
>>> gcd_by_iterative(-48, 18)
150
150
6
151
-
151
+
152
152
Large numbers:
153
153
>>> gcd_by_iterative(1071, 462)
154
154
21
155
155
>>> gcd_by_iterative(12345, 54321)
156
156
3
157
-
157
+
158
158
Same numbers:
159
159
>>> gcd_by_iterative(42, 42)
160
160
42
161
161
>>> gcd_by_iterative(-15, -15)
162
162
15
163
-
163
+
164
164
One divides the other:
165
165
>>> gcd_by_iterative(15, 45)
166
166
15
@@ -175,10 +175,10 @@ def gcd_by_iterative(x: int, y: int) -> int:
175
175
def main ():
176
176
"""
177
177
Call Greatest Common Divisor function with user input.
178
-
178
+
179
179
Prompts user for two integers separated by comma and calculates their GCD
180
180
using both recursive and iterative methods.
181
-
181
+
182
182
Examples:
183
183
This function handles user input, so direct doctests aren't practical.
184
184
However, it should handle valid input like "24,40" and invalid input gracefully.
@@ -197,4 +197,4 @@ def main():
197
197
198
198
199
199
if __name__ == "__main__" :
200
- main ()
200
+ main ()
0 commit comments