Decomporre i polinomi


12

Dato un polinomio integrale di grado strettamente maggiore di uno, scomporlo completamente in una composizione di polinomi integrali di grado strettamente maggiore di uno.

Dettagli

  • Un polinomio integrale è un polinomio con solo numeri interi come coefficienti.
  • Dati due polinomi pe qla composizione è definita da (p∘q)(x):=p(q(x)).
  • La decomposizione di un polinomio integrale pè una sequenza ordinata finita di polinomi integrali q1,q2,...,qndove deg qi > 1per tutti 1 ≤ i ≤ ne p(x) = q1(q2(...qn(x)...)), e tutti, qinon sono ulteriormente scomponibili. La decomposizione non è necessariamente unica.
  • Ad esempio, è possibile utilizzare elenchi di coefficienti o tipi polinomiali incorporati come input e output.
  • Nota che molti builtin per questa attività in realtà decompongono i polinomi su un determinato campo e non necessariamente numeri interi, mentre questa sfida richiede un polinomio intero di decomposizione. (Alcuni polinomi interi potrebbero ammettere la decomposizione in polinomi interi e la decomposizione che contengono polinomi razionali.)

Esempi

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]

Usa Maxima per generare esempi: provalo online!

Alcuni algoritmi di decomposizione possono essere trovati qui e qui .

Risposte:


4

Pari / GP , 84 byte

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

Basato sull'algoritmo descritto qui .

Provalo online!


1
Controllate (o filtrate) se effettivamente ottenete una decomposizione in polinomi integrali? (Sto chiedendo perché gli algoritmi nel documento collegato descrivono la fattorizzazione su un certo campo e non conosco alcun Pari / GP.)
flawr

1
@flawr Sto usando il secondo algoritmo nel documento, che restituisce sempre polinomi integrali quando l'input è integrale. In effetti, la divisorsfunzione in Pari / GP restituisce sempre polinomi primitivi quando prende un polinomio integrale. Si può dimostrare che se p=q∘r, dove pe rsono integrali, ed rè primitivo r(0)=0, allora qdeve anche essere integrale. Qui p, q, rconforme a f, g, hnella carta.
alephalpha,

2

Wolfram Language (Mathematica) , 29 byte

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

Provalo online!

Ho l'esempio qui impostato per comporre un polinomio casuale da quadratiche casuali (o meno), espanderlo e quindi provare a scomporlo.

È necessario complicare il polinomio con la variabile fittizia (a) poiché il built-in non tenterà di decomporre un monomiale.

Ho notato che la risposta ha spesso coefficienti molto più grandi rispetto alla composizione originale, ma in realtà sono sempre numeri interi.


Dove hai trovato le informazioni che Decompose[]restituiranno sempre i polinomi integrali (se alimentati con polinomi interi)? Di recente, quando abbiamo discusso in chat, non siamo riusciti a trovare nulla al riguardo.
flawr

1
Fai Options@Decomposee te lo dirà {Modulus->0}. Ora cerca Modulo e vedrai "L'impostazione Modulo-> 0 specifica l'anello completo [DoubleStruckCapitalZ] di numeri interi."
Kelly Lowder

Ah che bello, grazie per l'elaborazione!
flawr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.