Как вы можете проверить, является ли многочлен обратимым с NTL? - PullRequest
0 голосов
/ 01 июля 2018

Я искал часы и не нашел ответа. Я работаю с полиномами по модулю другого полинома (так что 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 голосов
/ 03 июля 2018

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

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

...