Skip to content

Commit e626332

Browse files
committed
use abs in gcd and lcm
1 parent bc37cf0 commit e626332

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

integration_tests/test_math.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,17 @@ def test_gcd():
7171
assert i == 2
7272
i = gcd(21, 14)
7373
assert i == 7
74+
i = gcd(21, -12)
75+
assert i == 3
7476

7577
def test_lcm():
7678
i: i32
7779
i = lcm(10, 4)
7880
assert i == 20
7981
i = lcm(21, 14)
8082
assert i == 42
83+
i = lcm(21, -12)
84+
assert i == 84
8185

8286

8387
test_factorial_1()

src/runtime/math.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ def gcd(a: i32, b: i32) -> i32:
123123
Returns greatest common divisor of `a` and `b`
124124
"""
125125
temp: i32
126+
if a < 0:
127+
a = -a
128+
if b < 0:
129+
b = -b
126130
while b != 0:
127131
a = mod(a, b)
128132
temp = a
@@ -135,4 +139,10 @@ def lcm(a: i32, b: i32) -> i32:
135139
"""
136140
Returns least common multiple of `a` and `b`
137141
"""
142+
if a < 0:
143+
a = -a
144+
if b < 0:
145+
b = -b
146+
if a*b == 0:
147+
return 0
138148
return (a*b)//gcd(a, b)

0 commit comments

Comments
 (0)