[undefined] {: [if] [undefined] parse-name [if] include forth200x-code/extensions/parse-name.fs [then] include forth200x-code/extensions/locals.fs [then] : inv-mod-vfx {: x y | q u v a c t -- n :} x TO u y TO v 1 TO c 0 TO a BEGIN u WHILE v u / TO q c TO t a q c * - TO c t TO a u TO t v q u * - TO u t TO v REPEAT a y MOD DUP TO a 0< IF y a + ELSE a THEN ; s" gforth" environment? [if] 2drop : inv-mod-gforth { x y -- n } 1 0 x y begin { c a u v } u while v u / { q } a q c * - c v q u * - u repeat a y mod dup 0< if y + then ; [then] : inv-mod-stack ( x y -- n ) tuck 0 1 2swap swap begin ( y a c v u ) dup while 2dup / >r 2swap tuck r@ * - 2swap tuck r> * - repeat 2drop drop over mod dup 0< if over + then nip ; -3 7 mod 4 <> [if] : mod >r s>d r> fm/mod drop ; [then] : inv-mod-vfx-f {: x y | q u v a c t -- n :} x TO u y TO v 1 TO c 0 TO a BEGIN u WHILE v u / TO q c TO t a q c * - TO c t TO a u TO t v q u * - TO u t TO v REPEAT a y MOD ; s" gforth" environment? [if] 2drop : inv-mod-gforth-f { x y -- n } 1 0 x y begin { c a u v } u while v u / { q } a q c * - c v q u * - u repeat a y mod ; [then] : inv-mod-stack-f ( x y -- n ) tuck 0 1 2swap swap begin ( y a c v u ) dup while 2dup / >r 2swap tuck r@ * - 2swap tuck r> * - repeat 2drop drop swap mod ; \ n should be prime 3010349 constant n : bench {: xt -- :} 0. n 1 ?do i n xt execute s>d d+ loop d. ;