0

我已经搜索了几个小时并没有找到答案。我正在使用多项式模另一个多项式(所以ZZ_pE对象)。当我使用 methodinv(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或类似的方法。如何检查多项式是否可逆?

4

1 回答 1

1

检查多项式是否可逆ZZ_pE高度取决于您选择的p多项式和用于模数的多项式。在 NTLp中不必是素数,所以ZZ_p不必是域,多项式也不必是不可约的,所以ZZ_pE可以是任何东西。

您的解决方案不起作用,因为默认情况下 NTL 会引发错误而不是异常。但是,如果您使用选项编译 NTL,则可以更改此设置NTL_EXCEPTIONS=on。有关详细信息,
请参阅http://www.shoup.net/ntl/doc/tour-unix.html 。

于 2018-07-03T11:50:06.107 回答