多项式的整数根


10

我们可以使用什么算法找到具有整数系数的多项式所有整数根?f(x)

我观察到,即使所有系数都很大,Sage仍可以在几秒钟内找到根。如何做到这一点?f(x)


1
您是否正在寻找一种算法来返回给定多项式的整数根?如果是,那是不确定的,问题不在这里。您可以在范围更广的计算机科学上询问它。
卡夫

7
坚持,稍等。为什么犹豫不决使问题脱节?这是一个合理的研究水平的问题。
Jeffε

2
那么,贤者如何做到呢?犹豫不决-甚至众所周知,也无法做出决定-从理论上讲不会使问题变得无趣。理论计算机科学家一直在解决不确定的问题-例如,请参阅所有计算机辅助验证。
Jeffε

11
卡夫,你的意思不对。不确定的是具有许多变量的Diophantine方程的可解性(因此很容易有无限多的实际解,而一个正在寻找整数/有理数的解)。但是这个问题是关于单变量多项式,它当然是可以确定的(如果f x 的度为d,则根数最多为d,并且可以检查哪一个是整数。f(x)f(x)dd
Mahdi Cheraghchi 2013年

1
@Pratik在单变量情况下,您不需要Gröbner基。
Yuval Filmus 2013年

Answers:


10

f

无论如何,Sage文档都清楚地说明了他们如何进行根搜索:“如果K是整数域,则使用的下一种方法是尝试分解多项式。如果成功,则对于每个度数因子a * x + b,我们将-b / a作为根(只要此商实际上在所需的环中)。” 参见http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html

因此,您的问题变成了它们如何有效地分解具有整数系数的多项式? 显然,Sage正在调用NTL来执行此操作(有关NTL详细信息,请参见http://www.shoup.net/ntl/doc/ZZXFactoring.txt)。

如果需要渐近有效的方法,可以参考Lenstra,Lenstra和Lovasz的方法(https://openaccess.leidenuniv.nl/handle/1887/3810)。


1
感谢您的帮助提示!迷人。您可能愿意编辑答案以详细说明如何将其转换为算法,以及运行时间是多少?最坏情况下的运行时间是否是指数形式的(因为可能需要花费次指数时间才能分解,因此前导系数和尾随系数可能会成倍地除数)?如果是这样,是否有更好的算法,或者这是最好的算法?而且,这种方法难道不是只找到理性根源,而没有非理性根源吗?
DW

重读问题并看到您对问题的理解有所不同,我不再完全确定,但是对于我和一些评论者来说,问题似乎是整数根。你不是这样看的吗?
2013年

@minar,你是对的。现在,我重新阅读了问题,看起来确实如此。我一定读得太快了。(我最初将这个问题曲解为暗示我们想要具有整数系数的多项式的所有根,但是在重新阅读该问题时,这似乎是一种曲解。)
DW

2
对于渐近且实际上有效的方法,最著名的算法是van Hoeij(请参见此处)。实际上,NTL似乎正在使用它。
2013年
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.