Zerlegen Sie Polynome

12

Zerlegen Sie ein ganzzahliges Polynom mit einem Grad, der genau größer als eins ist, vollständig in eine Zusammensetzung von ganzzahligen Polynomen mit einem Grad, der genau größer als eins ist.

Einzelheiten

  • Ein ganzzahliges Polynom ist ein Polynom mit nur ganzen Zahlen als Koeffizienten.
  • Gegeben sind zwei Polynome pund qdie Zusammensetzung ist definiert durch (p∘q)(x):=p(q(x)).
  • Die Zerlegung eines ganzzahligen Polynoms pist eine endlich geordnete Folge von ganzzahligen Polynomen, bei q1,q2,...,qndenen deg qi > 1für alle 1 ≤ i ≤ nund nicht p(x) = q1(q2(...qn(x)...))alle qiweiter zerlegbar sind. Die Zersetzung ist nicht unbedingt eindeutig.
  • Sie können zB Koeffizientenlisten oder eingebaute Polynomtypen als Ein- und Ausgabe verwenden.
  • Beachten Sie, dass viele Builtins für diese Aufgabe die Polynome tatsächlich über ein bestimmtes Feld und nicht unbedingt über ganze Zahlen zerlegen, während diese Herausforderung eine Zerlegung ganzzahliger Polynome erfordert. (Einige ganzzahlige Polynome lassen möglicherweise eine Zerlegung in ganzzahlige Polynome sowie eine Zerlegung mit rationalen Polynomen zu.)

Beispiele

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]

Verwenden Sie Maxima, um Beispiele zu generieren: Probieren Sie es online aus!

Einige Zerlegungsalgorithmen finden Sie hier und hier .

Fehler
quelle

Antworten:

4

Pari / GP , 84 Bytes

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

Basierend auf dem hier beschriebenen Algorithmus .

Probieren Sie es online!

Alephalpha
quelle
1
Prüfen (oder filtern) Sie, ob Sie tatsächlich eine Zerlegung in integrale Polynome erhalten? (Ich frage, weil die Algorithmen in dem verlinkten Artikel die Faktorisierung über ein Feld beschreiben, und ich kenne keine Pari / GP.)
Fehler
1
@flawr Ich verwende den zweiten Algorithmus in diesem Artikel, der immer ganzzahlige Polynome zurückgibt, wenn die Eingabe ganzzahlig ist. Tatsächlich gibt die divisorsFunktion in Pari / GP immer primitive Polynome zurück, wenn ein ganzzahliges Polynom verwendet wird. Es kann bewiesen werden, dass wenn p=q∘r, wo pund rintegral sind und rprimitiv mit r(0)=0, dann qauch integral sein muss. Hier p, q, rentspricht f, g, hin dem Papier.
Alephalpha
2

Wolfram Language (Mathematica) , 29 Byte

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

Probieren Sie es online!

Ich habe das Beispiel hier eingerichtet, um ein zufälliges Polynom aus zufälligen Quadraten (oder weniger) zu erstellen, es zu erweitern und dann zu versuchen, es zu zerlegen.

Es ist notwendig, das Polynom mit der Dummy-Variablen (a) zu komplizieren, da das eingebaute System nicht versucht, ein Monom zu zerlegen.

Ich bemerke, dass die Antwort oft viel größere Koeffizienten als in der ursprünglichen Komposition hat, aber sie sind in der Tat immer ganze Zahlen.

Kelly Lowder
quelle
Wo haben Sie die Informationen gefunden, Decompose[]die immer ganzzahlige Polynome zurückgeben (wenn sie mit ganzzahligen Polynomen gespeist werden)? Als wir in letzter Zeit im Chat diskutierten, konnten wir nichts darüber finden.
Fehler
1
Tu es Options@Decomposeund es wird dir sagen {Modulus->0}. Schauen Sie nun nach Modulus und Sie werden sehen: "Die Einstellung Modulus-> 0 gibt den vollen Ring [DoubleStruckCapitalZ] von ganzen Zahlen an."
Kelly Lowder
Ah das ist schön, danke für die Ausarbeitung!
Fehler