整數分解
正整數寫成幾個約數的乘積
在數學中,整數分解(英語:integer factorization)又稱素因數分解(prime factorization),是將一個正整數寫成幾個約數的乘積。例如,給出45這個數,它可以分解成9×5。根據算術基本定理,這樣的分解結果應該是獨一無二的。這個問題在代數學、密碼學、計算複雜性理論和量子計算機等領域中有重要意義。
完整的因子列表可以根據約數分解推導出,將冪從零不斷增加直到等於這個數。例如,因為,45可以被 , , , , ,和,或者 1,5,3,9,15,和 45整除。相對應的,約數分解只包括約數因子。
給出兩個大約數,很容易就能將它們兩個相乘。但是,給出它們的乘積,找出它們的因子就顯得不是那麼容易了。這就是許多現代密碼系統的關鍵所在。如果能夠找到解決整數分解問題的快速方法,幾個重要的密碼系統將會被攻破,包括RSA公鑰演演算法和Blum Blum Shub隨機數發生器。
儘管快速分解是攻破這些系統的方法之一,仍然會有其它的不涉及到分解的其它方法。所以情形完全可能變成這樣:整數分解問題仍然是非常困難,這些密碼系統卻是能夠很快攻破。有的密碼系統則能提供更強的保證:如果這些密碼系統被快速破解(即能夠以多項式時間複雜度破解),則可以利用破解這些系統的演演算法來快速地(以多項式時間複雜度)分解整數。換句話說,破解這樣的密碼系統不會比整數分解更容易。這樣的密碼系統包括Rabin密碼系統(RSA的一個變體)以及Blum Blum Shub隨機數發生器。
2005年,作為公共研究一部分的有663個二進位數位之長的RSA-200已經被一種一般用途的方法所分解。
如果一個大的,有n個二進位數位長度的數是兩個差不多大小相等的約數的乘積,現在還沒有很好的演演算法來以多項式時間複雜度分解它。
這就意味著沒有已知演演算法可以在O(n)(k為常數)的時間內分解它。但是現在的演演算法也是比Θ(e)快的。換句話說,現在我們已知最好的演演算法比指數數量級時間要快,比多項式數量級時間要慢。已知最好的漸近線運行時間是普通數域篩選法(GNFS)。時間是:
整數分解
現在還不確切知道整數分解屬於哪個複雜度類。
我們知道這個問題的判定問題形式(“請問N是否有一個比M小的約數?”)是在NP與反NP之中。因為不管是答案為是或不是,我們都可以用一個素因數以及該素因數的素數證明來驗證這個答案。由秀爾演演算法可知,這個問題在BQP中。大部分的人則懷疑這個問題不在P、NP完全、以及反NP完全這三個複雜性類別中。如果這個問題可以被證明為NP完全或反NP完全,則我們便可推得。這將會是個很震憾的結果,也因此大多數人猜想整數分解這個問題不在上述的複雜性類別中。也有許多人嘗試去找出多項式時間的演演算法來解決這個問題,但是都尚未成功,因此這個問題也被多數人懷疑不在P中。
一個特別的因子分解演演算法的運行時間依賴它本身的未知因子:大小,類型等等。在不同的演演算法之間運行時間也是不同的。
• 試除法
• 車輪分解
• 波拉德RHO演演算法
• 代數群因式分解演演算法,其中包括Pollard'sp−1演演算法、Williams'p+1演演算法和Lenstra橢圓曲線分解法
• 費馬素數判定法
• 歐拉因式分解法
• 特殊數域篩選法
一般用途演演算法的運行時間僅僅依賴要分解的整數的長度。這種演演算法可以用來分解RSA數。大部分一般用途演演算法基於平方同餘方法。
• Dixon演演算法
• 連分數分解法(CFRAC)
• 二次篩選法
• 理性篩選法
• 普通數域篩選法
• Shanks' square forms factorization(SQUFOF)
• 秀爾演演算法