UNPKG

491 Btext/coffeescriptView Raw
1test_mgcd = ->
2 logout("testing mgcd\n")
3 for i in [1...100]
4 a = mint(i)
5 for j in [1...100]
6 b = mint(j)
7 c = mgcd(a, b)
8 d = egcd(a, b)
9 if (mcmp(c, d) != 0)
10 throw new Error("test_mgcd failed")
11 logout("ok\n")
12
13# Euclid's algorithm
14
15egcd = (a, b) ->
16 sign_ = 0
17 if (MZERO(b))
18 stop("divide by zero")
19 #b = mcopy(b)
20 if (MZERO(a))
21 return b
22 sign_ = MSIGN(b)
23 #a = mcopy(a)
24 while (!MZERO(b))
25 c = mmod(a, b)
26 #mfree(a)
27 a = b
28 b = c
29 a = setSignTo(a,sign_)
30 return a
31