簡體   English   中英

具有整數系數的多項式的快速因式分解

[英]Fast factorization of polynomial with integers coefficients

我想在整數環上快速分解多項式(原始多項式有整數系數,所有因子都有整數系數)。

例如,我想分解4*x^6 + 20*x^5 + 29*x^4 - 14*x^3 - 71*x^2 - 48*x(2*x^4 + 7*x^3 + 4*x^2 - 13*x - 16)*(2*x + 3)*x

我應該選擇哪種算法來避免代碼的復雜性和方法的低效率(談論算術運算和內存消耗的總量)?

我將使用C編程語言。

例如,可能有一些好的算法用於整數環模數素數的多項式因式分解?

由於Sage是免費和開源的,你應該能夠找到Sage使用的算法然后調用它,或者最壞的情況下用C重新實現它。但是,如果你真的必須從頭開始寫一個程序,這就是我想要的do:首先找到所有系數的gcd並將其除去,這使得多項式“內容自由”。 然后取導數並找到原始多項式及其導數的多項式gcd。 通過多項式除法將該因子從原始多項式中取出,這將您的問題分解為兩部分:分解無內容,無方形多項式(p / gcd(p,p')),並分解另一個多項式(gcd(p, p'))可能不是方形的。 對於后者,從一開始就重新開始,直到您將問題簡化為分解一個或多個無內容,無方形多項式。

下一步是實現分解算法mod p。 Berlekamp的算法可能是最簡單的,盡管Cantor-Zassenhaus是最先進的。

最后,應用Zassenhaus算法來計算整數。 如果發現它太慢,可以使用“Lenstra-Lenstra-Lovasz格子基礎約簡算法”進行改進。 http://en.wikipedia.org/wiki/Factorization_of_polynomials#Factoring_univariate_polynomials_over_the_integers

如你所見,這一切都相當復雜,取決於抽象代數的大量理論。 使用Sage使用的相同庫,或者重新實現Sage實現,甚至只是從程序中調用運行版本的Sage內核,你會好得多。

根據mathoverflow的這個答案Sage使用FLINT進行因子分解。

FLINT(數論快速庫)是一個支持數論計算的C庫。 它也是數論中算法的研究項目。

因此,可以在該庫中查看甚至使用分解算法的實現,該庫經過充分測試和穩定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM