gpt4 book ai didi

c++ - NTL 库 GF2X

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:27 24 4
gpt4 key购买 nike

我正在使用 NTL 库试验伽罗华域。 GF2 是整数 mod 2,GF2XGF2 上的多项式,GF2EGF2E 上的环/场扩展 GF2.

我面临的问题是我按如下方式初始化不可约多项式

GF2X irreduc;
SetCoeff(irreduc, 128, 1);
SetCoeff(irreduc, 7, 1);
SetCoeff(irreduc, 2, 1);
SetCoeff(irreduc, 1, 1);
SetCoeff(irreduc, 0, 1);
GF2E::init(irreduc);

然后我还初始化了两个多项式:

GF2X a; 
SetCoeff(a, 120);
SetCoeff(a, 22);

GF2X b;
SetCoeff(b, 128);
SetCoeff(b, 51);

std::cout << "a: " << a << '\n';
std::cout << "b: " << b << '\n';

并将它们相乘:

std::cout << "\ndeg(a * b): " << deg(a * b) << '\n';

输出为deg(a * b): 248,超出了2^128的域/环,由不可约多项式定义。

我知道我可能遗漏了一些明显的东西,但我对这个领域还很陌生,所以请多多包涵。

谢谢!

最佳答案

正如您已经说过的,GF2X 表示 GF2 上的多项式,因此它们不会被您初始化 GF2E 时使用的多项式减少。您需要将多项式转换为 GF2E,然后一切都按预期进行。

所以把你的最后一行改成

std::cout << "\ndeg(a * b): " << deg(conv<GF2X>(conv<GF2E>(a) * conv<GF2E>(b))) << '\n';

输出结果

deg(a * b): 124

这种转换非常难看。我不确定是否有更好的方法来做,而且 NTL 的记录方式很难为你想做的事情找到合适的功能。我只找到了 GF2E::degree(),但这只会给你不可约多项式的度数。当您找到正确的方法时请告诉我。

关于c++ - NTL 库 GF2X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com