具体来说,我正在尝试以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_pE
或ZZ_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])
之类的构造函数。有什么我想念的吗?
答案 0 :(得分:0)
对于ZZX
,官方方法是自行设置每个系数。
为此,有功能
void SetCoeff(ZZX& x, long i, const ZZ& a)
有关更多详细信息,请参见http://www.shoup.net/ntl/doc/ZZX.cpp.html。
我不确定这是否也适用于ZZ_pX
。