分解多项式


12

给定度数严格大于1的整数多项式,请将其完全分解为度数严格大于1的整数多项式的组合。

细节

  • 一个完整的多项式是唯一的整数作为系数的多项式。
  • 给定两个多项式pq所述组合物由下式定义(p∘q)(x):=p(q(x))
  • 整数多项式的分解是整数多项式p的有限有序序列,q1,q2,...,qn其中deg qi > 11 ≤ 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生成示例:在线尝试!

一些分解算法可以在这里这里找到。

Answers:


4

Pari / 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
您是否检查(或过滤掉)是否实际上分解为整数多项式?(我之所以问是因为链接论文中的算法描述了某个领域的因式分解,而我不知道任何Pari / GP。)
虚假的

1
@flawr我正在使用本文中的第二种算法,当输入为整数时,该算法始终返回整数多项式。实际上,divisorsPari / GP中的函数在采用整数多项式时总是返回原始多项式。可以证明,如果p=q∘r,,pr是不可分割的,并且r是与原始的r(0)=0,则q还必须是不可分割的。在这里pqr对应的fgh在纸上。
alephalpha

2

Wolfram语言(Mathematica),29个字节

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

在线尝试!

我在这里设置了示例,以从随机二次项(或更少二次项)组成一个随机多项式,将其展开,然后尝试分解它。

由于内置变量不会尝试分解单项式,因此必须使多项式与虚拟变量(a)复杂化。

我注意到答案通常具有比原始组合大得多的系数,但实际上它们始终是整数。


您在哪里找到Decompose[]总是返回整数多项式的信息(如果使用整数多项式)?最近在聊天中讨论时,我们找不到任何关于此的信息。
瑕疵的

1
Options@Decompose,它会告诉你{Modulus->0}。现在查找Modulus,您会看到“设置Modulus-> 0指定整数的完整环[DoubleStruckCapitalZ]。”
Kelly Lowder,

嗯,太好了,感谢您的详细说明!
瑕疵的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.