在 NTL 中构造多项式的标准方法是什么?

What is the standard way to construct a polynomial in NTL?

本文关键字:标准 方法 是什么 多项式 NTL      更新时间:2023-10-16

具体来说,我正在尝试用Z_p[x]模构造一个多项式另一个多项式P,这需要使用ZZ_pE。在 NTL 库中,ZZ_pE的构造函数是

ZZ_pE(); // initial value 0
ZZ_pE(const ZZ_pE& a); // copy constructor
explicit ZZ_pE(const ZZ_p& a); // promotion
explicit ZZ_pE(long a); // promotion
ZZ_pE& operator=(const ZZ_pE& a); // assignment
ZZ_pE& operator=(const ZZ_p& a); // assignment
ZZ_pE& operator=(long a); // assignment

如您所见,您只能从一个数字(ZZ_plong(或另一个ZZ_pE构造一个ZZ_pE。因此,我能够构造的唯一多项式是 0 次。以下代码设置模 p = 100001 和 P = x^4 - 1,并构造一个ZZ_pEg = 5。

// Declare polynomial and coefficient moduli
ZZ_p::init(ZZ(100001));
ZZ_pX cyclo = ZZ_pX(INIT_MONO, 4) - 1;
ZZ_pE::init(cyclo);
// Construct g
ZZ_pE g = ZZ_pE(5);

我的目标是使g成为我选择的高次多项式。我该怎么做?

后续问题是:初始化多项式的标准(最有效(方法是什么(例如,在ZZX中(?如果我想构造 f = x^2 - 3x + 4,这是我目前的方法:

ZZ list[3] ={ZZ(4), ZZ(-3), ZZ(1)};
ZZX f;
for(int i=0; i<4; i++)
f += ZZX(INIT_MONO, i, list[i]);

即,通过在 for 循环中分别添加多项式的每个项。似乎 NTL 库可以从像ZZX([4 -3 1])这样的构造函数中受益。我错过了什么吗?

对于ZZX,官方方法是单独设置每个系数。 为此,有功能

void SetCoeff(ZZX& x, long i, const ZZ& a)

有关更多详细信息,请参阅 http://www.shoup.net/ntl/doc/ZZX.cpp.html。

我不确定这是否也适用于ZZ_pX.