对已知的N进行大数分解,并且因子p小于因子q,设计python代码求p
时间: 2024-02-22 11:00:24 浏览: 68
这里提供一种基于Pollard-rho算法的大数分解方法,并且保证因子p小于因子q。
``` python
import random
def gcd(a, b):
if a == 0:
return b
return gcd(b % a, a)
def pollard_rho(n):
x = random.randint(1, n - 1)
y = x
c = random.randint(1, n - 1)
d = 1
while d == 1:
x = (x * x + c) % n
y = (y * y + c) % n
y = (y * y + c) % n
d = gcd(abs(x - y), n)
if d == n:
return None
return d
def factorize(n):
p = pollard_rho(n)
while p is None:
p = pollard_rho(n)
if p > n // p:
p, q = factorize(n // p), p
else:
q = n // p
return p
n = 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
p = factorize(n)
print("p =", p)
```
这里的 `pollard_rho` 函数是基于随机数的 Pollard-rho 算法,用于找到 n 的一个因子,如果找不到则返回 None。`factorize` 函数则是基于这个算法进行大数分解,并且保证因子p小于因子q。
阅读全文