整数係数を持つ多項式すべての整数根を見つけるためにどのようなアルゴリズムを使用できますか?
すべての係数が非常に大きい場合でも、Sageは数秒以内に根を見つけることができることを観察しました。どのようにしてそれを行うことができますか?
整数係数を持つ多項式すべての整数根を見つけるためにどのようなアルゴリズムを使用できますか?
すべての係数が非常に大きい場合でも、Sageは数秒以内に根を見つけることができることを観察しました。どのようにしてそれを行うことができますか?
回答:
の係数が整数または有理数であり、整数の根が必要であると仮定すると、最も簡単なアプローチは、整数または有理根の定理を使用することです。http://en.wikipedia.org/wiki/Rational_root_theoremを参照してください DWによって指摘されているように、定数係数を因数分解することが難しい場合、これは問題になる可能性があります(/math/123018/polynomial-も参照) and-integer-roots)
いずれにせよ、Sageのドキュメントでは、ルート検索の方法を明確に説明しています。「Kが積分領域の場合に使用される次の方法は、多項式を因数分解することです。これが成功した場合、すべての次数1係数a * x + b、-b / aをルートとして追加します(この商が実際に目的のリングにある限り)。 " http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.htmlを 参照してください。
だからあなたの質問はどのように効率的に多項式を整数係数で因数分解するのですか? どうやら、セージはそれを行うためにNTLを呼び出しています(NTLの詳細についてはhttp://www.shoup.net/ntl/doc/ZZXFactoring.txtを参照してください)。
漸近的に効率的な方法が必要な場合は、Lenstra、Lenstra、およびLovaszの方法を参照できます(https://openaccess.leidenuniv.nl/handle/1887/3810)。