多項式の分解


12

厳密に1より大きい次数の積分多項式が与えられた場合、それを厳密に1より大きい次数の積分多項式の合成に完全に分解します。

詳細

  • 整数多項式は係数として整数のみを持つ多項式です。
  • 2つの多項式を考えるpと、組成物は、によって定義されます。q(p∘q)(x):=p(q(x))
  • 分解の積分多項式のはp不可欠な多項式の有限順序付けられたシーケンスであるすべてのためにと、すべてさらに分解性ではありません。分解は必ずしも一意ではありません。q1,q2,...,qndeg qi > 11 ≤ i ≤ np(x) = q1(q2(...qn(x)...))qi
  • たとえば、係数のリストを使用したり、入力および出力として組み込みの多項式タイプを使用したりできます。
  • このタスクの多くの組み込み関数は、実際には整数ではなく、特定のフィールド上の多項式を実際に分解しますが、この課題には分解整数多項式が必要です。(一部の整数多項式は、有理多項式を含む分解と同様に整数多項式への分解を許可する場合があります。)

x^2 + 1
[x^2 + 1] (all polynomials of degree 2 or less are not decomposable)
x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6 x - 1
[x^3 - 2, x^2 - 2x + 1]
x^4 - 8x^3 + 18x^2 - 8x + 2 
[x^2 + 1, x^2 - 4x + 1]
x^6 + x^2 + 1
[x^3 + x + 1, x^2]
x^6
[x^2, x^3]
x^8 + 4x^6 + 6x^4 + 4x^2 + 4 = (x^2 + 1)^4 + 3
[x^2 + 3, x^2, x^2 + 1]
x^6 + 6x^4 + x^3 + 9x^2 + 3x - 5
[x^2 + x - 5, x^3 + 3*x], [x^2 + 5*x + 1, x^3 + 3*x - 2]

例の生成にはMaximaを使用してください:オンラインで試してみてください!

ここここでいくつかの分解アルゴリズムを見つけることができます

回答:


4

パリ/ GP、84バイト

f(p)=[if(q'',[f(q),r],p)|r<-x*divisors(p\x),r''&&p==subst(q=substpol(p,r,x),x,r)][1]

ここで説明されたアルゴリズムに基づいて。

オンラインでお試しください!


1
実際に分解を積分多項式にしたかどうかをチェック(またはフィルターアウト)しますか?(リンクされた論文のアルゴリズムはある分野での因数分解を説明しているため、私は尋ねています。パリ/ GPについては知りません。)
flawr

1
@flawr論文の2番目のアルゴリズムを使用しています。このアルゴリズムは、入力が積分のときに常に積分多項式を返します。実際、divisorsPari / GPの関数は、整数多項式を取るときに常に原始多項式を返します。if p=q∘r、where pおよびrは整数でありrr(0)=0場合、それqも整数でなければなりません。ここでpqrに対応しfgh紙に。
-alephalpha

2

Wolfram言語(Mathematica)、29バイト

Decompose[#/.x->x+a,x]/.a->0&

オンラインでお試しください!

ここでは、ランダム2次(またはそれ以下)からランダム多項式を構成し、展開してから分解しようとする例があります。

組み込み関数は単項式を分解しようとしないため、ダミー変数(a)で多項式を複雑にする必要があります。

答えには元の構成よりもはるかに大きな係数が含まれていることがよくありますが、実際には常に整数です。


Decompose[]整数多項式を常に返す多項式の情報をどこで見つけましたか?最近チャットで議論したとき、私たちはそれについて何も見つけることができませんでした。
-flawr

1
Options@Decompose、それはあなたに教えてくれます{Modulus->0}。今、「[DoubleStruckCapitalZ]整数の0を指定フルリング設定Modulus-を>。」モジュラスを見て、あなたが表示されます
ケリーLowder

ああ、すてきです、詳しく説明してくれてありがとう!
flawr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.