如何生成 GF(3^2) 的乘法表?
我明白,這對於任意 n 和 p = 2 是如何工作的,但我正在努力以更高的素數為基礎。在下文中,我想使用不可約多項式
r(x) = x²+1 = 101
。static const __flash uint8_t lookup[9][9] = { // 0, 1, 2, 10, 11, 12, 20, 21, 22 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 0, 1, 2, 10, 11, 12, 20, 21, 22, // 1 0, 2, ?, ?, ?, ... // 2 ... };
在這種情況下, 的條目
2 * 2
將4
等同於10
使用 的基數3
。10 mod 101
以 of 為底,那3
將-21
等價於2
因為-21 + 10 + 10 + 10 = 2
(10 等價於以 3 為底的 3)。所以這個條目的實際最終結果是2
.
這是正確的還是完全錯誤的?我很掙扎,因為如果你將這些條目寫成多項式,你就會有:
0, 1, 2, x, x + 1, x + 2, 2x, 2x + 1, 2x + 2
如果我從上面的猜測是正確的,那麼2 * 2 = x and x mod x²+1 = 2
這看起來有點錯誤。
如果我從上面的猜測是正確的,那麼
2 * 2 = x and x mod x²+1 = 2
這看起來有點錯誤。不僅看起來不對,而且是不對的。
如果 $ GF(3) $ ,
2 * 2 = 1
, 即使您將欄位擴展到 $ GF(3^2) $ .一般來說,乘以 2 很容易;我們可以只使用身份 $ 2 \times a = (1 + 1) \times a = 1 \times a + 1 \times a = a + a $ , 對於任何 $ a $ .
一個有點棘手的部分是
10 * 10
;但是,如果我們只使用多項式歸約,我們會得到 $ x \times x = x^2 \bmod x^2 + 1 = x^2 - (x^2 + 1) = 2 $ , 所以10 * 10 = 2
.考慮到這一點,我們可以使用分配律完成所有其他乘法運算,例如, $ (x + 2) \times (2x + 1) = (x \times 2x) + (x \times 1) + (2 \times 2x) + (2 \times 1) = (2\cdot 2) + (x) + (x) + 2 = 2x $ , 那是,
12 * 21 = 20