我的任務是使用Fermat's factorization method來分解非常大的合成數。數字大小爲1024位,大約爲309位十進制數字。加快我的費馬因式分解函數(Python)
我已經拿出下面的Python代碼,它使用gmpy2
模塊來提高準確性。它只是Wikipedia page上顯示的僞代碼的Python實現。我閱讀該頁面上的「Sieve Improvement」部分,但不知道如何實現它。
def fermat_factor(n):
assert n % 2 != 0 # Odd integers only
a = gmpy2.ceil(gmpy2.sqrt(n))
b2 = gmpy2.square(a) - n
while not is_square(b2):
a += 1
b2 = gmpy2.square(a) - n
factor1 = a + gmpy2.sqrt(b2)
factor2 = a - gmpy2.sqrt(b2)
return int(factor1), int(factor2)
def is_square(n):
root = gmpy2.sqrt(n)
return root % 1 == 0 # '4.0' will pass, '4.1212' won't
此代碼運行速度相當之快的小數目,但花費太長的大題目中所給那些數字。我怎樣才能提高這段代碼的速度?我不是在尋找人爲我編寫代碼,但希望得到一些建議。謝謝你的回覆。
神聖煙,這使我的功能快8倍!我所要做的只是用'gmpy2.isqrt'替換'gmpy2.sqrt'並刪除'gmpy2.ceil'。謝謝! – LonelyWebCrawler