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