分解 30 位十进制数字的算法
Algorithms for factorizing a 30 decimal digit number
我的教授给我布置了一个 RSA 因式分解问题。给定的模数是 30 个十进制数字长。我一直在搜索很多关于因式分解算法的信息。但是对于我给定的要求,选择一个是一件很头疼的事情。对于 30 位十进制数字,哪些所有算法都能提供更好的性能?
注意:到目前为止,我已经阅读了蛮力法和二次筛法。后者复杂,前者耗时
还有另一种方法称为 Pollard's Rho algorithm,它不如 GNFS 快,但能够在几分钟而不是几小时内分解 30 位数字。
算法很简单。它会在找到任何因子时停止,因此您需要递归调用它以获得完整的因式分解。这是 Python 中的基本实现:
def rho(n):
def gcd(a, b):
while b > 0:
a, b = b, a%b
return a
g = lambda z: (z**2 + 1) % n
x, y, d = 2, 2, 1
while d == 1:
x = g(x)
y = g(g(y))
d = gcd(abs(x-y), n)
if d == n:
print("Can't factor this, sorry.")
print("Try a different polynomial for g(), maybe?")
else:
print("%d = %d * %d" % (n, d, n // d))
rho(441693463910910230162813378557) # = 763728550191017 * 578338290221621
或者您可以只使用现有的软件库。我看不出重新发明这个特殊的轮子有什么意义。
我的教授给我布置了一个 RSA 因式分解问题。给定的模数是 30 个十进制数字长。我一直在搜索很多关于因式分解算法的信息。但是对于我给定的要求,选择一个是一件很头疼的事情。对于 30 位十进制数字,哪些所有算法都能提供更好的性能?
注意:到目前为止,我已经阅读了蛮力法和二次筛法。后者复杂,前者耗时
还有另一种方法称为 Pollard's Rho algorithm,它不如 GNFS 快,但能够在几分钟而不是几小时内分解 30 位数字。
算法很简单。它会在找到任何因子时停止,因此您需要递归调用它以获得完整的因式分解。这是 Python 中的基本实现:
def rho(n):
def gcd(a, b):
while b > 0:
a, b = b, a%b
return a
g = lambda z: (z**2 + 1) % n
x, y, d = 2, 2, 1
while d == 1:
x = g(x)
y = g(g(y))
d = gcd(abs(x-y), n)
if d == n:
print("Can't factor this, sorry.")
print("Try a different polynomial for g(), maybe?")
else:
print("%d = %d * %d" % (n, d, n // d))
rho(441693463910910230162813378557) # = 763728550191017 * 578338290221621
或者您可以只使用现有的软件库。我看不出重新发明这个特殊的轮子有什么意义。