: d*mod { D: a D: b D: m -- d } \ multiplication modulo m a m dmod to a \ normalize a b m dmod to b \ normalize b a 1. d= if b exit then b 1. d= if a exit then a m a d- dumin { D: aA } b m b d- dumin { D: bB } aA d0= bB d0= or if 0. exit then aA 1. d= if m b d- exit then bB 1. d= if m a d- exit then aA a d= bB b d= and aA a d<> bB b d<> and or { pos } \ pos is True if positive, False otherwise aA UMAX bB d/ du<= if aA bB d* m dmod pos 0= if m 2swap d- m dmod then exit then aA d2/ { D: a0 } aA a0 d- { D: a1 } bB d2/ { D: b0 } bB b0 d- { D: b1 } a1 b1 m recurse { D: p4 } 0. 0. 0. { D: p1 D: p2 D: p3 } a0 a1 d= b0 b1 d= and if p4 to p1 p4 to p2 p4 to p3 else a0 a1 d= if p4 m a1 d- m dmod m d+mod 2dup to p3 to p1 p4 to p2 else p4 m b1 d- m dmod m d+mod to p2 b0 b1 d= if p2 to p1 p4 to p3 else p4 m a1 d- m dmod m b1 d- m dmod 1. m d+mod m d+mod m d+mod to p1 p4 m a1 d- m dmod m d+mod to p3 then then then p1 p2 p3 p4 m d+mod m d+mod m d+mod pos 0= if m 2swap d- m dmod then ;