【问题标题】:How can you check if a polynomial is invertible with NTL?如何检查多项式是否与 NTL 可逆?
【发布时间】:2018-07-01 00:40:03
【问题描述】:

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

【问题讨论】:

  • 这不是编程问题。这是一道数学题。
  • @Peter 如果正在使用的软件库提供了一种方法,则不会。
  • @aschepler - OP 提到 NTL 中没有这种方法。这意味着他正在寻找一种算法。这使它成为一道数学题。

标签: c++ ntl


【解决方案1】:

ZZ_pE 中检查多项式是否可逆很大程度上取决于您选择的p 和用于取模的多项式。在 NTL 中,p 不必是素数,所以ZZ_p 不需要是一个域,多项式也不需要是不可约的,所以ZZ_pE 可以是任何东西。

您的解决方案不起作用,因为 NTL 默认抛出错误而不是异常。但是,如果您使用选项 NTL_EXCEPTIONS=on 编译 NTL,则可以更改此设置。
详情请见http://www.shoup.net/ntl/doc/tour-unix.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2014-06-02
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多