32 lines
674 B
Plaintext
32 lines
674 B
Plaintext
get "libhdr"
|
|
|
|
let mulinv(a, b) =
|
|
b<0 -> mulinv(a, -b),
|
|
a<0 -> mulinv(b - (-a rem b), b),
|
|
valof
|
|
$( let t, nt, r, nr = 0, 1, b, a rem b
|
|
until nr = 0
|
|
$( let tmp, q = ?, r / nr
|
|
tmp := nt ; nt := t - q*nt ; t := tmp
|
|
tmp := nr ; nr := r - q*nr ; r := tmp
|
|
$)
|
|
resultis r>1 -> -1,
|
|
t<0 -> t + b,
|
|
t
|
|
$)
|
|
|
|
let show(a, b) be
|
|
$( let mi = mulinv(a, b)
|
|
test mi>=0
|
|
do writef("%N, %N -> %N*N", a, b, mi)
|
|
or writef("%N, %N -> no inverse*N", a, b)
|
|
$)
|
|
|
|
let start() be
|
|
$( show(42, 2017)
|
|
show(40, 1)
|
|
show(52, -217)
|
|
show(-486, 217)
|
|
show(40, 2018)
|
|
$)
|