在有限域或整数上分解多项式


20

在不使用任何内置分解因数/多项式函数的情况下,将多项式完全分解为整数或有限域的不可约式。

输入值

您的程序/函数将收到一些质数(或零)n作为输入。场/环是顺序(即的有限域Z/nZ),或者只是Z如果n0。如果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批评了我的测试用例


1
认为这使我回想起一些较难的本科数学。我什至在朝着正确的方向前进吗?
Digital Trauma 2014年

1
这让我想起了我做噩梦试图正确打印多项式的时间……
Sp3000,2014年

抱歉,我不明白,但是第一个输入数字应该做什么?或它如何影响输出?
Optimizer

@Optimizer第一个输入数字确定要处理的字段/整数。如果数字非零,则说明您正在处理该顺序的有限字段。有限阶域p具有元素{0, 1, ... , p-1},并且在加法/乘法mod下p。基本上,通过mod降低任何系数p就可以了。另外,请注意,如果它具有根,即线性因子,{0, ... , p-1}则将其插入多项式时将产生0(mod p)之一。
贾斯汀

1
@flawr,以保标准方法相比Z是因子在Z/pZ一个合适的p,然后Hensel提升。但是,可高尔夫球运动的方法可能是(并且这肯定是我正在寻找的路线)对因素的高度使用简单的约束并对其施加暴力。
彼得·泰勒

Answers:


17

GolfScript(222字节)

~.@:q@.0\{abs+}/2@,2/)?*or:^{\1$^base{^q- 2/-}%.0=1=1$0=q>+{{:D[1$.,2$,-)0:e;{.0=0D=%e|:e;(D(@\/:x@@[{x*~)}%\]zip{{+}*q!!{q%}*}%}*e+])0-{;0}{@;@\D.}if}do}*;\).^3$,)2/?<}do;][[1]]-{'('\.,:x;{.`'+'\+'x^'x(:x+x!!*+\!!*}%')'}/

在线演示

笔记

  1. 输入格式后是nGolfScript系数数组,从最高有效到最低有效。例如,0, x^5 + 5x^3 + x^2 + 4x + 1应将格式设置为0 [1 0 5 1 4 1]
  2. 在一个有限域上,只有数量有限的多项式足够小而相关。但是,事实并非如此Z。我Z通过使用Mignotte的高度限制的轻松形式来处理。关于因式分解的高度界限的一篇出色论文是Z [x]中的因式界限,John Abbott,2009年(链接到arxiv预印本;他的简历说,它已被《符号计算杂志》接受)。这里给出的最宽松的形式是L-2规范,但是为了节省字节,我进一步放松了,改用L-1规范。然后是审判部门强行强迫的情况。
  3. 在一个有限域上,每个多项式都是常数乘以一元多项式,因此我只用一元多项式进行除法运算,并在该域中保存一个倒数。但是,Z这只是一个环,因此有必要按非简单的候选因素进行试验划分。我通过进行前导因子除法测试并在中累积一个“错误”标志来设法避免不执行有理数e
  4. 第2点和第3点都暗示分解的情况Z通常较慢,因此无法通过在线演示进行测试。但是,最慢的官方测试用例需要10分钟,这完全在“合理的”时间限制内。
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.