你如何用 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