Ayrıştırılmış Polinomlar


12

Birinden kesinlikle daha büyük bir dereceye sahip bir integral polinomu göz önüne alındığında, onu tamamen birinden daha büyük bir dereceye kadar entegre bir polinomların bir bileşimine tamamen ayrıştırın.

ayrıntılar

  • Bir ayrılmaz polinom katsayıları olarak sadece tamsayılar olan bir polinom olduğunu.
  • İki polinom verilen pve bileşim ile tanımlanır .q(p∘q)(x):=p(q(x))
  • Ayrışma tamamlayıcı polinomun pyekpare polinom sonlu sıralı dizisidir tüm ve ve bütün daha ayrışabilir değildir. Ayrışma mutlaka benzersiz değildir.q1,q2,...,qndeg qi > 11 ≤ i ≤ np(x) = q1(q2(...qn(x)...))qi
  • Girdi ve çıktı olarak örneğin katsayı listeleri veya yerleşik polinom türleri kullanabilirsiniz.
  • Bu görev için birçok yapının polinomları belirli bir alan üzerinde ayrıştırdığını ve mutlaka tamsayılar gerektirmediğini, bu zorluğun ayrışma tamsayı polinomlarını gerektirdiğini unutmayın. (Bazı tamsayı polinomları, tamsayı polinomlarına ayrışmayı ve rasyonel polinomları içeren ayrışmayı kabul edebilir.)

Örnekler

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]

Örnek oluşturmak için Maxima'yı kullanın: Çevrimiçi deneyin!

Bazı ayrışma algoritmaları burada ve burada bulunabilir .

Yanıtlar:


4

Pari / GP , 84 bayt

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

Burada açıklanan algoritmaya dayanmaktadır .

Çevrimiçi deneyin!


1
İntegral polinomlara gerçekten ayrışma olup olmadığını kontrol ediyor musunuz (veya filtreliyor musunuz)? (Bağlantılı makaledeki algoritmalar bazı alanlardaki çarpanlara ayırmayı tanımladığından ve herhangi bir Pari / GP bilmiyorum diye
soruyorum

1
@flawr Kağıttaki ikinci algoritmayı kullanıyorum, giriş her zaman integral polinomları döndürüyor. Aslında, divisorsPari / GP'deki fonksiyon, ayrılmaz bir polinom aldığında daima ilkel polinomları döndürür . p=q∘rNerede pve nerede rintegral ise ve rilkel ise r(0)=0, o zaman qda integral olması gerektiği kanıtlanabilir . Burada p, q, rkarşılık f, g, hgazetede.
alephalpha

2

Wolfram Dili (Mathematica) , 29 bayt

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

Çevrimiçi deneyin!

Ben burada rastgele kuadratik (veya daha az) rastgele bir polinom oluşturmak, genişletmek ve sonra ayrıştırmak için ayarlanmış örnek var.

Polinomu kukla değişken (a) ile karmaşıklaştırmak gerekir, çünkü yerleşik bir monomiali ayrıştırmaya çalışmaz.

Cevabın genellikle orijinal kompozisyondakinden çok daha büyük katsayılara sahip olduğunu fark ettim, ancak aslında her zaman tamsayılar.


Decompose[]Her zaman integral polinomları (tamsayı polinomları ile beslendiyse) döndürecek bilgileri nerede buldunuz ? Son zamanlarda sohbette tartışırken bunun hakkında hiçbir şey bulamadık.
flawr

1
Yapın Options@Decomposeve size söyleyecektir {Modulus->0}. Şimdi Modulus'a bakın ve "Modulus-> 0 ayarı tamsayıların tam halini belirtir [DoubleStruckCapitalZ]."
Kelly Lowder

Ah bu güzel, detaylandırdığın için teşekkürler!
Kusur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.