Розкладіть многочлени


12

Давши інтегральний многочлен ступеня, строго більший за одиницю, повністю розкласти його на композицію інтегральних многочленів ступеня, строго більших за одиницю.

Деталі

  • Цілочисельний многочлен є многочленом тільки з цілими числами в якості коефіцієнтів.
  • Беручи під увагу два полінома pі композиції визначається .q(p∘q)(x):=p(q(x))
  • Розкладання інтегрального полінома pє кінцевою впорядкованої послідовністю цілочисельних многочленів , q1,q2,...,qnде deg qi > 1для всіх 1 ≤ i ≤ nі p(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
Ви перевіряєте (чи відфільтровуєте), чи дійсно ви отримуєте розкладання на цілісні многочлени? (Я запитую, оскільки алгоритми у зв'язаному документі описують факторизацію за деяким полем, і я не знаю жодної
пари

1
@flawr Я використовую другий алгоритм у роботі, який завжди повертає цілісні многочлени, коли вхід є інтегральним. Фактично, divisorsфункція Pari / GP завжди повертає примітивні многочлени, коли приймає інтегральний многочлен. Можна довести, що якщо p=q∘r, де pі rє цілісними, і rпримітивними r(0)=0, то qвони також повинні бути цілісними. Тут p, q, rвідповідають f, g, hв роботі.
алефальфа

2

Мова Вольфрама (Mathematica) , 29 байт

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

Спробуйте в Інтернеті!

У мене є приклад, створений тут, щоб скласти випадковий многочлен із випадкової квадратики (або менше), розгорнути його, а потім спробувати розкласти його.

Необхідно ускладнити многочлен на манекенну змінну (a), оскільки вбудований модуль не намагатиметься розкласти одночлен.

Я зауважую, що у відповіді часто є набагато більші коефіцієнти, ніж у початковому складі, але вони дійсно завжди цілі.


Де ви знайшли інформацію, яка Decompose[]завжди повертатиме цілісні многочлени (якщо їх годувати цілими поліномами)? Під час обговорення в чаті нещодавно ми нічого не могли знайти про це.
недолік

1
Зробіть, Options@Decomposeі це вам скаже {Modulus->0}. Тепер погляньте на модуль, і ви побачите "Налаштування Modulus-> 0 визначає повне кільце [DoubleStruckCapitalZ] цілих чисел".
Келлі Лоудер

Ах, це приємно, дякую за розробку!
недолік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.