在GF(2)中乘多项式

时间:2010-01-28 11:18:43

标签: c# math

我想在c#中将gf(2)中的2个多项式相乘。请帮忙。

3 个答案:

答案 0 :(得分:4)

您可能希望使用按位运算符,并使用ulonguint类型表示多项式。也就是说,如果P 64 (GF(2))是可接受的。如果没有,你将不得不使用其他一些技巧。

ulong a, b;
// Compute r = x * y
ulong r = 0;
for (uint i = 0; i < 64; ++i) {
    if ((a & (1 << i)) != 0) {
        r ^= b << i;
    }
}

表示摘要:

  • z & (1 << i)从z(x)
  • 中选择x i 系数
  • r ^= b << i计算r'(x)= r(x)+ b(x)* x i

免责声明:我不是C#程序员。

答案 1 :(得分:2)

行。

  • 定义一个代表Galois Field的类。
  • 定义一个表示字段上多项式的类。
  • 在多项式上定义乘法运算符
  • 你已经完成了。

也许你可以更清楚地知道你遇到问题的那一步。

答案 2 :(得分:0)

哇,这是个大问题,主要取决于你必须使用的字段的类型。

一个很好的介绍是Sage的manual page用于有限域计算。

执行摘要:对于小字段(| F |&lt; 2 16 ),请通过Givaro C ++库使用Zech日志表。对于较大的字段,请使用PARI。特征字段2(这是您需要的)使用NTL

关于字段实现的论文是available at ACM,它描述了如何使用Maxima计算机代数系统完成。

但是如果你只需要一个小玩具库来计算家庭作业的字段上的多项式,我就会这样做:

  1. 创建一个表示多项式的类,它应该相乘并除以多项式。多项式很容易表示为数组。使多项式类成为通用类,如Polynomial<coefficient_type>
  2. 为prime p创建一个表示组Z p 的类。该类将是多项式的系数。使用Z 2 作为您的字段。
  3. 创建一个对多项式进行分解的类。
  4. 为了表示GF(p k ),找到一个度为k的不可约多项式,并且所有在Z p 之上的度数达到k的多项式都是你的元素。
  5. 添加它们很容易(添加系数,它们已经在Z p 中)
  6. 在乘以两个多项式之后,请确保将结果除以4中选择的不可约多项式。
  7. 因此,您将实现一个通用的简单程序,它可以在所有有限域上添加和乘法元素!