Какой алгоритм мы можем использовать, чтобы найти все целочисленные корни многочлена с целыми коэффициентами?
Я замечаю, что Мудрец может найти корни в течение нескольких секунд, даже когда все коэффициенты очень велики. Как это может сделать это?
Какой алгоритм мы можем использовать, чтобы найти все целочисленные корни многочлена с целыми коэффициентами?
Я замечаю, что Мудрец может найти корни в течение нескольких секунд, даже когда все коэффициенты очень велики. Как это может сделать это?
Ответы:
Предполагая, что коэффициенты являются целыми или рациональными и что вам нужны целочисленные корни, самый простой подход состоит в использовании целочисленной или рациональной теоремы о корне. См. Http://en.wikipedia.org/wiki/Rational_root_theorem. Как отмечает DW, это может быть проблематично, если постоянный коэффициент трудно учитывать (см. Также /math/123018/polynomial- и-целочисленные корни )
В любом случае документация Sage четко объясняет, как они выполняют поиск в корне: «Следующий метод, который используется, если K является целочисленной областью, состоит в том, чтобы попытаться разложить многочлен. Если это удастся, то для каждой степени один фактор a * x + b, мы добавляем -b / a в качестве корня (пока этот фактор действительно находится в нужном кольце). " См. Http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html .
Итак, ваш вопрос звучит так: как они эффективно разлагают многочлены с целыми коэффициентами? Очевидно, Sage вызывает NTL для этого ( подробности NTL см. В http://www.shoup.net/ntl/doc/ZZXFactoring.txt ).
Если вам нужен асимптотически эффективный метод, вы можете обратиться к методу Lenstra, Lenstra и Lovasz ( https://openaccess.leidenuniv.nl/handle/1887/3810 ).