RosettaCodeData/Task/Modular-inverse/GW-BASIC/modular-inverse.gw-basic

28 lines
724 B
Plaintext

10 ' Modular inverse
20 LET E% = 42
30 LET T% = 2017
40 GOSUB 1000
50 PRINT MODINV%
60 END
990 ' increments e stp (step) times until bal is greater than t
992 ' repeats until bal = 1 (mod = 1) and returns count
994 ' bal will not be greater than t + e
1000 LET D% = 0
1010 IF E% >= T% THEN GOTO 1140
1020 LET BAL% = E%
1025 ' At least one iteration is necessary
1030 LET STP% = ((T% - BAL%) \ E%) + 1
1040 LET BAL% = BAL% + STP% * E%
1050 LET COUNT% = 1 + STP%
1060 LET BAL% = BAL% - T%
1070 WHILE BAL% <> 1
1080 LET STP% = ((T% - BAL%) \ E%) + 1
1090 LET BAL% = BAL% + STP% * E%
1100 LET COUNT% = COUNT% + STP%
1110 LET BAL% = BAL% - T%
1120 WEND
1130 LET D% = COUNT%
1140 LET MODINV% = D%
1150 RETURN