Skip to main content

Square and Multiply 演算法

1 min221 words

此演算法主要是針對abmodna^{b} \>\> mod \>\> nbb很大而計算機通常算不太出來的時候使用的方法,一開始zz設為1,並且把指數部分拆成二進位,從左至右運算,遇到b=1b=1時計算zz的平方乘上底數再modnmod \>\> n,而b=0b=0時計算zz的平方再modnmod \>\> n即可。

舉例:abmodn=(325)20mod963=(325)10100bmod963a^{b} \>\> mod\>\> n = (325)^{20} \>\> mod \>\> 963 = (325)^{10100_{b}} \>\> mod \>\> 963

b’s bitsoperationz
  1
1z2amodnz^{2} \cdot a \>\> mod \>\> n325
0z2modnz^{2} \>\> mod \>\> n658
1z2amodnz^{2} \cdot a \>\> mod \>\> n703
0z2modnz^{2} \>\> mod \>\> n190
0z2modnz^{2} \>\> mod \>\> n469

n=(325)20mod963=469(mod963n = (325)^{20} \>\> mod \>\> 963 = 469 \>\> (mod \>\> 963

執行時間大概是 1.5len(b)\cdot len(b)模運算