2010-01-28 37 views
0

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

+2

您需要提供更多关于您遇到的问题的信息。这是数学吗?它是否转换为代码?你的代码是否会抛出一个错误? – Oded 2010-01-28 11:22:03

回答

4

您可能想要使用按位运算符,并使用ulonguint类型来表示多项式。也就是说,如果P (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)选择从xŽ系数(x)的
  • r ^= b << i计算R'(X)= R(X)+ B( x)* x i

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

2

好的。

  • 定义表示伽罗瓦域的类。
  • 定义了一个表示一个字段上的多项式的类。
  • 定义多项式的乘法运算符
  • 然后就完成了。

也许您可以更清楚地了解您遇到问题的步骤。

0

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

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

执行摘要:对于小型领域(| F | )通过Givaro C++库使用Zech日志表。对于更大的领域使用PARI。特征2的字段(这是你需要的)使用NTL

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

但如果你只需要一个小玩具图书馆在为家庭作业领域的因素多项式这里就是我会做:

  1. 创建它代表一个多项式的一类,它应该增加繁殖和分裂多项式。多项式很容易表示为一个数组。使多项式类成为通用类,如Polynomial<coefficient_type>
  2. 创建一个代表组Z p的类,对于素数p。这个类将是多项式的系数。使用Z 为您的领域。
  3. 创建一个影响多项式的类。
  4. 若要表示GF(p k)找到k次不可约多项式,并且所有多项式的次数最多为k的项目Z p是您的元素。
  5. 添加他们很容易(添加系数,他们已经Z轴 p
  6. 两个多项式乘法后,请确保你把结果在模选择4的不可约多项式。

因此,您将实现一个通用的简单程序,它可以在所有有限域上添加和乘上元素!