我想在c#中将gf(2)中的2个多项式相乘。请帮忙。
答案 0 :(得分:4)
您可能希望使用按位运算符,并使用ulong
或uint
类型表示多项式。也就是说,如果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)r ^= b << i
计算r'(x)= r(x)+ b(x)* x i 免责声明:我不是C#程序员。
答案 1 :(得分:2)
行。
也许你可以更清楚地知道你遇到问题的那一步。
答案 2 :(得分:0)
一个很好的介绍是Sage的manual page用于有限域计算。
执行摘要:对于小字段(| F |&lt; 2 16 ),请通过Givaro C ++库使用Zech日志表。对于较大的字段,请使用PARI
。特征字段2(这是您需要的)使用NTL
。
关于字段实现的论文是available at ACM,它描述了如何使用Maxima计算机代数系统完成。
但是如果你只需要一个小玩具库来计算家庭作业的字段上的多项式,我就会这样做:
Polynomial<coefficient_type>
。p
创建一个表示组Z p 的类。该类将是多项式的系数。使用Z 2 作为您的字段。4
中选择的不可约多项式。因此,您将实现一个通用的简单程序,它可以在所有有限域上添加和乘法元素!