私は非常に高い指数に数値を上げることを含むプログラムをPythonで書いています。これを行うために、連続二乗法を実装して計算時間を短縮し、オーバーフロー エラーのリスクを排除しようとしています。
連続する四角は同じことを行うことを意図しておりbase**exponent % modulo
、私が書いた現在の関数は次のとおりです。
def ssp(b, m, n):
ssp = 1
while n>0:
if n % 2 == 1:
ssp = b*ssp % m
b = b**2 % m
n = n // 2
return ssp
関数をテストするとssp(7, 13, 93)
、19 になるはずの 8 という答えが返ってきます。