1

私は非常に高い指数に数値を上げることを含むプログラムを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 という答えが返ってきます。

4

2 に答える 2

4

pow(7, 93, 13)あなたは=>をやってい8ますが、あなたが望むのはpow(7, 13, 93)=>です19

関数の 2 番目と 3 番目の引数を入れ替えます。

>>> def ssp(b, n, m):
...     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
于 2013-07-22T14:39:25.407 に答える