■剰余の計算(その23)

[Q]2^341 mod 341,すなわち,2^341を341で割ったときの余りを求めよ.

===================================

2^341 mod 341を計算するにあたっては、

2^10=1 mod 341であることから運良く計算できたが、そんな基底bや指数nに対しても成り立つアルゴリズムが必要になる。

もっと正式にb^n mod mを計算するために、まずnの2進数分解を求める。

 反復2倍乗法を応用した反復平方による累乗法を用いると,

  341=1+2^2+2^4+2^6+2^8

  2^341=2^(1+2^2+2^4+2^6+2^8)=2・2^(2^2)・2^(2^4)・2^(2^6)・2^(2^8)

  2=2

  2^2=4

  2^(2^2)=(2^2)^2=16

  2^(2^3)=((2^2)^2)^2=256

  2^(2^4)=(((2^2)^2)^2)^2=65536=64

  2^(2^5)=((((2^2)^2)^2)^2)^2=4096=4

  2^(2^6)=(((((2^2)^2)^2)^2)^2)^2=16

  2^(2^7)=((((((2^2)^2)^2)^2)^2)^2)^2=256

  2^(2^8)=(((((((2^2)^2)^2)^2)^2)^2)^2)^2=64

  2^341=2^(1+2^2+2^4+2^6+2^8)=2・2^(2^2)・2^(2^4)・2^(2^6)・2^(2^8)

=2・2^4・2^6・2^4・2^6=2   (2^4・2^6=1より)

===================================