: gcd \ a b -- gcd dup 0 n:= if drop ;; then tuck \ b a b n:mod \ b a-mod-b recurse ; : lcm \ m n 2dup \ m n m n n:* \ m n m*n n:abs \ m n abs(m*n) -rot \ abs(m*n) m n gcd \ abs(m*n) gcd(m.n) n:/mod \ abs / gcd nip \ abs div gcd ; : demo \ n m -- 2dup "LCM of " . . " and " . . " = " . lcm . ; 12 18 demo cr -6 14 demo cr 35 0 demo cr bye