在不使用任何内置分解因数/多项式函数的情况下,将多项式完全分解为整数或有限域的不可约式。
输入值
您的程序/函数将收到一些质数(或零)n
作为输入。场/环是顺序(即的有限域Z/nZ
),或者只是Z
如果n
是0
。如果n
不是0
或素数,则您的程序可能会失败。多项式将在中F[x]
。
您的程序/函数还将接收多项式作为输入。
输入有一些灵活性,请确保指定打算接收输入的方式。例如,可以将多项式作为系数列表输入,或者以大多数人期望的形式(例如:)50x^3 + x^2
或其他一些合理的形式输入。或者输入场/环的格式也可以不同。
输出量
您的程序/函数将完全输出因式分解的多项式。您可以扩展多个根(即(x + 1)(x + 1)
代替(x + 1)^2
)。您可以删除二进制运算符之间的空格。您可以将并置替换为*
。您可以在奇怪的地方插入空格。您可以将因子重新排序为所需的任何顺序。这个x
词可能只是(x)
。x
可以写成x^1
; 然而,常数项可能不会有x^0
。+
允许有多余的迹象。您可能没有一个0
前置词,必须将其排除在外。每个因素的前置项必须为正,负号必须在外部。
测试用例,您的程序应该能够在合理的时间(例如,<= 2小时)内为每一个产生输出:
输入: 2, x^3 + x^2 + x + 1
输出: (x + 1)^3
输入: 0, x^3 + x^2 + x + 1
输出: (x + 1)(x^2 + 1)
输入: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
输出: (3x + 2)(2x - 5)(x^2 + 3)
输入: 5, x^4 + 4x^3 + 4x^2 + x
输出: x(x + 4)(x + 4)(x + 1)
输入: 0, x^5 + 5x^3 + x^2 + 4x + 1
输出: (x^3 + 4x + 1)(x^2 + 1)
特别感谢Peter Taylor批评了我的测试用例
p
具有元素{0, 1, ... , p-1}
,并且在加法/乘法mod下p
。基本上,通过mod降低任何系数p
就可以了。另外,请注意,如果它具有根,即线性因子,{0, ... , p-1}
则将其插入多项式时将产生0
(mod p
)之一。
Z
是因子在Z/pZ
一个合适的p
,然后Hensel提升。但是,可高尔夫球运动的方法可能是(并且这肯定是我正在寻找的路线)对因素的高度使用简单的约束并对其施加暴力。