Fast Modular Exponentiation algorithm in the Hewlett Packard HP48G language, code contributed by a generous student.
Unfortunately, I myself do not know the exact syntax of this language, so I cannot vouch for the correctness of it.
To use the program: enter the base (X), exponent (E), and modulus (m)
on the stack (in that order). Then hit the variable name the program
is stored under. The result will be X^E % m
<< 1 -> X E M Y
<<
DO
IF E 2 MOD 0 == THEN @ Exponent is even
X X * M MOD 'X' STO @ X <= X*X % m
E 2 / 'E' STO @ E <= E / 2
ELSE
X Y * M MOD 'Y' STO @ Y <= X*Y % m
'E' 1 STO- @ E <= E - 1
END
UNTIL E 0 = @ Use "less than or equal to" character instead of =
END
Y
>>
>>