对已知的N进行大数分解,并且因子p小于因子q,设计不依赖第三方库的python代码求p
时间: 2024-02-22 21:00:16 浏览: 75
可以使用Pollard-Rho算法来解决这个问题,这是一个常见的大数分解算法。下面是一个不依赖第三方库的Python代码实现:
```python
import random
def gcd(a, b):
while b:
a, b = b, a % b
return a
def pollard_rho(N):
if N == 1:
return 1
if N % 2 == 0:
return 2
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 pollard_rho(N)
return d
N = 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
q = pollard_rho(N)
p = N // q
while p > q:
q = pollard_rho(N)
p = N // q
print(p)
```
代码中,我们首先使用Pollard-Rho算法随机找到N的一个因子q,然后计算p=N/q。如果p>q,则继续寻找N的因子q,直到p<=q。
希望这个代码能够帮助你解决问题。
阅读全文