Modular inverse: Difference between revisions

Add BCPL
(Add CLU)
(Add BCPL)
Line 368:
121
-1</pre>
 
=={{header|BCPL}}==
<lang bcpl>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)
$)</lang>
{{out}}
<pre>42, 2017 -> 1969
40, 1 -> 0
52, -217 -> 96
-486, 217 -> 121
40, 2018 -> no inverse</pre>
 
=={{header|Bracmat}}==
2,094

edits