次のようなべき乗表を作成します。
指数 | ログ
----+----
0 | 1
1 | 45
2 | 226
3 | 147
... | ...
128 | 0
... | ...
255 | 40
----------
「対数」値は 45 exp % 257 ですmodPow
。このテーブルを作成するには、関数 (数値を累乗し、ある値を法とする) を備えた任意精度の算術ライブラリが必要です。通常、ゼロの対数は定義されていないため、"exp" 128 の値は特殊なケースであることがわかります。
「ログ」列でそれを見つけて、数値の対数を計算します。その行の「exp」列の値は対数です。
初期化のスケッチは次のとおりです。
BigInteger V45 = BigInteger.valueOf(45);
BigInteger V257 = BigInteger.valueOf(257);
int[] exp = new int[256];
int[] log = new int[256];
for (int idx = 0; idx < 256; ++idx)
exp[idx] = V45.modPow(BigInteger.valueOf(idx), V257).intValue() % 256;
for (int idx = 0; idx < 256; ++idx)
log[exp[idx]] = idx;
この設定では、たとえば、log 45 (131) = log[131]
= 63、および 45 38 = exp[38]
= 59 です。