二乗によるべき乗:
例を見てみましょう。17 23を見つけたいとします。23 は10111
2 進数であることに注意してください。左から右に組み立ててみましょう。
// a exponent in binary
a = 17 //17^1 1
a = a * a //17^2 10
a = a * a //17^4 100
a = a * 17 //17^5 101
a = a * a //17^10 1010
a = a * 17 //17^11 1011
a = a * a //17^22 10110
a = a * 17 //17^23 10111
2 乗すると、指数が 2 倍になります (1 ビット左にシフトします)。m を掛けると、指数に 1 が加算されます。
modulo を減らしたい場合はn
、各乗算の後に行うことができます (数値が非常に大きくなる最後まで残すのではなく)。
65537 は10000000000000001
バイナリ形式なので、これらすべてが非常に簡単になります。それは基本的に
a = m
repeat 16 times:
a = a * a
a = a mod n
a = a * m
a = a mod n
もちろん、a、n、m は「大きな整数」です。a は (n-1) 2まで大きくなる可能性があるため、少なくとも 2048 ビットである必要があります。