你如何用 NTL 检查多项式是否可逆?
How can you check if a polynomial is invertible with NTL?
我已经搜索了几个小时,但没有找到答案。我正在使用多项式模另一个多项式(所以 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
或类似的方法。如何检查多项式是否可逆?
检查 ZZ_pE
中的多项式是否可逆在很大程度上取决于您选择的 p
和您用于模数的多项式。在 NTL 中 p
不必是素数,因此 ZZ_p
不需要是一个域,多项式也不需要是不可约的,因此 ZZ_pE
可以是任何东西。
您的解决方案不起作用,因为 NTL 默认抛出错误而不是异常。但是如果使用 NTL_EXCEPTIONS=on
.
选项编译 NTL,则可以更改此设置
有关详细信息,请参阅 http://www.shoup.net/ntl/doc/tour-unix.html。
我已经搜索了几个小时,但没有找到答案。我正在使用多项式模另一个多项式(所以 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
或类似的方法。如何检查多项式是否可逆?
检查 ZZ_pE
中的多项式是否可逆在很大程度上取决于您选择的 p
和您用于模数的多项式。在 NTL 中 p
不必是素数,因此 ZZ_p
不需要是一个域,多项式也不需要是不可约的,因此 ZZ_pE
可以是任何东西。
您的解决方案不起作用,因为 NTL 默认抛出错误而不是异常。但是如果使用 NTL_EXCEPTIONS=on
.
选项编译 NTL,则可以更改此设置
有关详细信息,请参阅 http://www.shoup.net/ntl/doc/tour-unix.html。