![](/img/trans.png)
[英]Check whether a number can be expressed as a sum of two semi-prime numbers in Python
[英]Optimizing Semi-prime Factoring Algo
我下面的方法是超級笨蛋和超級笨蛋慢。 有關優化建議的任何提示。 我知道對於兩個不同素數的半素數,數字小於或等於半素數的一半。 但我不確定如何更有效地檢查大數的素數列表。 對於 n 13 位和更大的數字是當我的崩潰時。
import math
def eratosthenes(n):
multiples = set()
primes = set()
for i in range(2, n+1):
if i not in multiples:
if i <= math.ceil(math.sqrt(n)+10):
primes.add(i)
for j in range(i*i, n+1, i):
multiples.add(j)
result = []
for p in primes:
while n % p == 0: # while p divide n...
result.append(p)
n = n // p
if n <= 1:
break
對於較大的素數,您可以嘗試使用簡單的實現Pollard 的 rho 算法
from fractions import gcd
def pollardfactor(n):
a=2
b=2
d=1
for c in [1,-1,2,3,5,7,-3,-5,-7]:
while True:
a=(a*a+c)%n
b=(b*b+c)%n
b=(b*b+c)%n
d=gcd(abs(a-b),n)
if 1 < d < n:
return(d)
elif d==n :
break
return -1
print(pollardfactor(5983391455009))
這應該在合理的時間內適用於 20 位數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.