24 lines
734 B
Plaintext
24 lines
734 B
Plaintext
BEGIN
|
|
PR precision=1000 PR
|
|
MODE LLI = LONG LONG INT; CO For brevity CO
|
|
PROC mod power = (LLI base, exponent, modulus) LLI :
|
|
BEGIN
|
|
LLI result := 1, b := base, e := exponent;
|
|
IF exponent < 0
|
|
THEN
|
|
put (stand error, (("Negative exponent", exponent, newline)))
|
|
ELSE
|
|
WHILE e > 0
|
|
DO
|
|
(ODD e | result := (result * b) MOD modulus);
|
|
e OVERAB 2; b := (b * b) MOD modulus
|
|
OD
|
|
FI;
|
|
result
|
|
END;
|
|
LLI a = 2988348162058574136915891421498819466320163312926952423791023078876139;
|
|
LLI b = 2351399303373464486466122544523690094744975233415544072992656881240319;
|
|
LLI m = 10000000000000000000000000000000000000000;
|
|
printf (($"Last 40 digits = ", 40dl$, mod power (a, b, m)))
|
|
END
|