【问题标题】:NTL library GF2XNTL 库 GF2X
【发布时间】:2019-03-22 01:38:28
【问题描述】:

我正在使用 NTL 库试验伽罗瓦域。 GF2 是模 2 的整数,GF2XGF2 上的多项式,GF2EGF2 上的环/字段扩展。

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

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 的场/环之外。

我知道我可能遗漏了一些明显的东西,但我对这个领域很陌生,所以请耐心等待。

谢谢!

【问题讨论】:

    标签: c++ polynomial-math polynomials ntl


    【解决方案1】:

    正如您已经说过的,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(),但这只会为您提供不可约多项式的度数。当您找到正确的方法时,请告诉我。

    【讨论】:

    • 谢谢,这很有帮助!如果我遇到更好的解决方案,我会编辑问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多