32 lines
535 B
CoffeeScript
32 lines
535 B
CoffeeScript
test_mgcd = ->
|
|
logout("testing mgcd\n")
|
|
for i in [1...100]
|
|
a = mint(i)
|
|
for j in [1...100]
|
|
b = mint(j)
|
|
c = mgcd(a, b)
|
|
d = egcd(a, b)
|
|
if (mcmp(c, d) != 0)
|
|
throw new Error("test_mgcd failed")
|
|
logout("ok\n")
|
|
|
|
# Euclid's algorithm
|
|
|
|
egcd = (a, b) ->
|
|
sign_ = 0
|
|
if (MZERO(b))
|
|
stop("divide by zero")
|
|
#b = mcopy(b)
|
|
if (MZERO(a))
|
|
return b
|
|
sign_ = MSIGN(b)
|
|
#a = mcopy(a)
|
|
while (!MZERO(b))
|
|
c = mmod(a, b)
|
|
#mfree(a)
|
|
a = b
|
|
b = c
|
|
a = setSignTo(a,sign_)
|
|
return a
|
|
|