你可以使用Pollard's rho整数分解算法。与其他速度较慢的算法相比,它效率很高且快速。例如:
Python 3:
from math import gcd
def factorization(n):
factors = []
def get_factor(n):
x_fixed = 2
cycle_size = 2
x = 2
factor = 1
while factor == 1:
for count in range(cycle_size):
if factor > 1: break
x = (x * x + 1) % n
factor = gcd(x - x_fixed, n)
cycle_size *= 2
x_fixed = x
return factor
while n > 1:
next = get_factor(n)
factors.append(next)
n //= next
return factors
对于小数字,它非常快速,在这种情况下仅花费了0.035
秒。
print(factorization(823767))
~$ time python3 factorization.py
[3, 7, 39227]
real 0m0,035s
user 0m0,031s
sys 0m0,004s
如果我们使用稍大一些的数字,计算时间会增加,但仍然非常快,例如在这种情况下只需0.038秒。
print(factorization(41612032092))
~$ time python3 factorization.py
[3, 4, 37, 1681, 127, 439]
real 0m0,038s
user 0m0,034s
sys 0m0,004s
如果我们使用非常大的数字,会花费更多时间,但考虑到这是一个巨大的数字,这仍然是一个非常合理的时间。在这种情况下,只需要 28.128
秒。
print(factorization(23756965471926357236576238546))
~$ time python3 factorization.py
[3, 3, 2, 479, 11423, 582677, 413975744296733]
real 0m28,128s
user 0m28,120s
sys 0m0,008s
希望这能对你有所帮助。祝好。