如何检查NTL是否可逆多项式?

时间:2018-07-01 00:40:04

标签: c++ 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或类似方法。如何检查多项式是否可逆?

1 个答案:

答案 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