Как вы можете проверить, является ли многочлен обратимым с 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 ответ

Решение

Проверка, является ли многочлен обратимым в ZZ_pE сильно зависит от вашего выбора p и полином, который вы используете для модуля. В NTL p не должны быть простыми, так ZZ_p не должно быть полем, и многочлен не должен быть неприводимым, поэтому ZZ_pE может быть что угодно.

Ваше решение не работает, потому что NTL выдает ошибки вместо исключений по умолчанию. Но вы можете изменить это, если вы компилируете NTL, используя опцию NTL_EXCEPTIONS=on,
См. http://www.shoup.net/ntl/doc/tour-unix.html для получения дополнительной информации.

Другие вопросы по тегам