我已经搜索了几个小时,却没有找到答案。我正在使用将另一个多项式取模的多项式(所以ZZ_pE
对象)。当我使用方法inv(ZZ_pE poly)
时,结果是相反的(如果存在)或以下错误消息:
ZZ_p: division by non-invertible element
Abort trap: 6
我尝试使用try / catch:
while(1)
{
random(f);
f = 2*f + 1;
try{
inv(fi, f);
break;
}
catch(...) {
// f not invertible
// Do nothing
}
}
,但错误消息仍会停止程序。据我所知,尚无isInvertible
或类似方法。如何检查多项式是否可逆?
答案 0 :(得分:0)
检查多项式在ZZ_pE
中是可逆的,在很大程度上取决于您对p
的选择以及用于模的多项式。在NTL中,p
不必是素数,因此ZZ_p
不必是字段,并且多项式也不必是不可约的,因此ZZ_pE
可以是任何东西。>
您的解决方案无效,因为默认情况下NTL引发错误而不是异常。但是,如果使用选项NTL_EXCEPTIONS=on
编译NTL,则可以更改此设置。
有关更多详细信息,请参见http://www.shoup.net/ntl/doc/tour-unix.html。