[英]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內核,你會好得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.