如何在有限域中实现乘法?

时间:2009-12-20 12:12:56

标签: math algebra

如果F:= GF(p ^ n)是具有p ^ n个元素的有限域,其中p是素数和na自然数,是否有任何有效的算法来计算F中两个元素的乘积?

到目前为止,我的想法是:

我知道F的标准结构是在GF(p)中采用n次的不可约多项式f,然后在商GF(p)[X] /(f)中将F的元素视为多项式,并且我有一种感觉,这可能已经是正确的方法,因为多项式乘法和加法应该很容易实现,但我不知道怎么看不出这是如何实际完成的。例如,如何选择合适的f,以及如何获得任意多项式的等价类?

5 个答案:

答案 0 :(得分:3)

是否有一种有效的算法来乘法GF(p ^ n)中的元素取决于你如何表示GF(p ^ n)的元素。

正如你所说,确实有一种方法可以在GF(p)(X)/(f)中工作。这里的加法和乘法相对简单。然而,确定合适的不可约多项式f并不容易 - 据我所知,没有一种有效的算法来计算合适的f。

另一种方法是使用所谓的Zech's logarithmsMagma使用 用于处理小有限域的预先计算的表。 GAP可能会这样做 虽然它的文档不太清楚,但也是如此。

使用数学结构进行计算通常非常棘手。你肯定不会错过任何明显的东西。

答案 1 :(得分:3)

这取决于您的需求和您的领域。

当你乘以时,你必须选择一个F x 的发电机。当你添加时,你必须使用F是一个较小的F p m 上的向量空间这一事实。在实践中,你做了很多时间是一些混合的方法。例如。如果你在F 256 上工作,取一个F 256 x 的生成器X,让G为F 上的最小多项式16 。你现在有了

(sum i小于16 a i X i )(sum j小于16 b < sub> j X j )= sum_k sum i + j = k a i b j X I + J

要使乘法有效,你需要做的就是存储F 16 的乘法表,并且(使用G)根据X的较低幂和F中的元素构造X ^ m子> 16

在极少数情况下,在p n = 2 2 n 的情况下,你会获得Conways领域的nimbers(看看Conways“获胜)方法“,或在Knuth的第4A卷第7.1.3节中),其中有非常有效的算法。

答案 2 :(得分:3)

首先选择GF [p]上的n次不可约多项式。只需生成随机数,随机多项式为irreducible with probability ~1/n

要测试随机多项式,您需要一些代码来对GF [p]上的多项式进行分解,有些算法请参见the wikipedia page

然后GF [p ^ n]中的元素只是GF [p]上的n次多项式。只需进行正规多项式算术,并确保计算余数为不可约多项式的模数。

编写此方案的简单版本非常容易。你可以在实现模数操作方面任意复杂化。请参阅modular exponentiationMontgomery multiplication,并使用FFT进行乘法。

答案 3 :(得分:2)

Galois Field Arithmetic Library(C ++,mod 2,看起来不支持其他素数元素)

LinBox(C ++)

MPFQ(C ++)

我没有这些的个人经验(但是已经为31级或更少的Galois字段制作了我自己的原始C ++类,没有太奇特或值得复制)。就像上面提到的一位评论者一样,你可以查看mathoverflow.net - 只要好好问一下,确保你先做完作业。有人应该知道哪种数学软件适合于操纵有限域,并且它与mathoverflow的感兴趣区域足够接近,以至于一个明确的问题不应该被关闭。

答案 4 :(得分:1)

假设这是一个在有限域中执行乘法的算法的问题,当确定一个 monic 不可约多项式 f(X) 时(否则考虑 Rabin's Test for Irreducibility

你有两个 n-1 次多项式

A(X) = a_0 + a_1*X + a_2*X^2 + ... + a_(n-1)*X^(n-1) and
B(X) = b_0 + b_1*X + b_2*X^2 + ... + b_(n-1)*X^(n-1)

系数a_k, b_kZ/pZ的代表{0,1,...,p-1}

产品定义为

C(X) = A(X)*B(X) % f(X),

其中模运算符“%”是多项式除法的余数A(X)*B(X) / f(X)

以下是复杂度为 O(n^2)

1.) 根据分配律,产品可以分解为

  B(X) * X^(n-1) * a_(n-1)
+ B(X) * X^(n-2) * a_(n-2)
+ ...
+ B(X) * a_0

=

  (...(a_(n-1) * B(X)  * X 
   +  a_(n-2)  * B(X)) * X
   +  a_(n-3)  * B(X)) * X
   ...
   +  a_1      * B(X)) * X
   +  a_0      * B(X)

2.) 对于 %-operator 是从 Z/pZ[X] 到 GF(p^n) 的环同态,它可以应用于上述迭代的每一步。

 A(X)*B(X) % f(X) =

  (...(a_(n-1) * B(X)  * X % f(X)
   +  a_(n-2)  * B(X)) * X % f(X)
   +  a_(n-3)  * B(X)) * X % f(X)
   ...
   +  a_1      * B(X)) * X % f(X)
   +  a_0      * B(X)

3.) 在每次与 X 相乘后,即系数空间中的一个移位,你有一个 nT_k(X) i> 带有元素 t_kn * X^n。归约模 f(X)

完成
T_k(X) % f(X) = T_k(X) - t_kn*f(X),

这是一个 n-1 次多项式。

最后,用归约多项式

r(x) := f(x) - X^n  and

T_k(X) =: t_kn * X^n + U_(n-1)(X)

T_k(X) % f(X) = t_kn * X^n + U_(n-1)(X) - t_kn*( r(x) + X^n)
              = U_(n-1)(X) - t_kn*r(x)

即所有步骤都可以用最大次数为 n-1 的多项式完成。