簡體   English   中英

優化半質因數分解算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM