equal
deleted
inserted
replaced
14 val pow: int -> int -> int (* exponent -> base -> result *) |
14 val pow: int -> int -> int (* exponent -> base -> result *) |
15 val gcd: int -> int -> int |
15 val gcd: int -> int -> int |
16 val gcds: int list -> int |
16 val gcds: int list -> int |
17 val lcm: int -> int -> int |
17 val lcm: int -> int -> int |
18 val lcms: int list -> int |
18 val lcms: int list -> int |
|
19 val log: int -> int (* binary logarithm *) |
19 end; |
20 end; |
20 |
21 |
21 structure Integer : INTEGER = |
22 structure Integer : INTEGER = |
22 struct |
23 struct |
23 |
24 |
52 fun gcds xs = fold gcd xs 0; |
53 fun gcds xs = fold gcd xs 0; |
53 |
54 |
54 fun lcm x y = (x * y) div (gcd x y); |
55 fun lcm x y = (x * y) div (gcd x y); |
55 fun lcms xs = fold lcm xs 1; |
56 fun lcms xs = fold lcm xs 1; |
56 |
57 |
|
58 fun logr 1 a = a |
|
59 | logr n a = logr (n div 2) (a + 1) |
|
60 |
|
61 fun log n = if n > 0 then logr n 0 else error "log: <= 0" |
|
62 |
57 end; |
63 end; |
58 |
64 |