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

时间:2018-06-30 15:26:56

标签: c++ ntl

具体来说,我正在尝试以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_pEZZ_p)或另一个long来构造一个ZZ_pE。因此,我唯一能够构造的多项式的阶数为0。以下代码集模数p = 100001和P = x ^ 4-1-1,并构造了ZZ_pE g = 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])之类的构造函数。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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