RosettaCodeData/Task/Modular-inverse/IS-BASIC/modular-inverse.basic

19 lines
433 B
Plaintext

100 PRINT MODINV(42,2017)
120 DEF MODINV(A,B)
130 LET B=ABS(B)
140 IF A<0 THEN LET A=B-MOD(-A,B)
150 LET T=0:LET NT=1:LET R=B:LET NR=MOD(A,B)
160 DO WHILE NR<>0
170 LET Q=INT(R/NR)
180 LET TMP=NT:LET NT=T-Q*NT:LET T=TMP
190 LET TMP=NR:LET NR=R-Q*NR:LET R=TMP
200 LOOP
210 IF R>1 THEN
220 LET MODINV=-1
230 ELSE IF T<0 THEN
240 LET MODINV=T+B
250 ELSE
260 LET MODINV=T
270 END IF
280 END DEF