문제

Pollard's rho 알고리즘이 실제로 작동하는지 이해하려고 노력하고 있지만 주위에 머리를 감쌀 수 없습니다. 나는 이미 CLRS 책에서 섹션을 읽었고 또한 인터넷에서도 아직도 그 구조 또는 분석을 이해할 수 없습니다. 이것은 euclid gcd 알고리즘과 함께 CLRS 책에서 의사 코드의 Java 구현입니다.

public static void pollardRho(int n) {
    Random rand = new Random();
    int i = 1;
    int x0 = rand.nextInt(n);
    int y = x0;
    int k = 2;
    while (true) {
        i++;
        int x = (x0 * x0 - 1) % n;
        int d = gcd(y - x, n);
        if (d != 1 && d != n) {
            System.out.println(d);
        }
        if (i == k) {
            y = x;
            k *= 2;
        }
        x0 = x;
    }
}

public static int gcd(int a, int b) {
    // fixes the issue with java modulo operator % returning negative 
    // results based on the fact that gcd(a, b) = gcd(|a|, |b|)
    if (a < 0) a = -a;
    if (b < 0) b = -b;

    while (b != 0) {
        int tmp = b;
        b = (a % b);
        a = tmp;
    }
    return a;
}
.

  • $ x= (x_0 ^ 2 - 1) \ mod n $ 을 선택합니까?
  • $ y $ 은 실제로 대표하고 $ \ {x_1, x_2, x_4, x_8, x_ {16}, ... \} $ ?
  • $ \ text {gcd} (yx, n) $ 을 계산하고 $ d $ < / span> $ n $
  • 의 요소로 밝혀졌습니다.
  • 및 왜 예상되는 실행 시간이 $ o (n {1/4}) $ 산술 연산 및 $ o (2 ^ {\ beta / 4} \ beta ^ 2) $ $ n $ $ \ beta $ 비트 길이?

$ x ^ 2 \ equiv 1 \ pmod {n} $ \ pmod> $ n $ 은 합성 및 $ x $ 은 요소이지만 $ y - x $ $ n $

도움이 되었습니까?

해결책

Pollard $ \ r로 $ 은 기능 $ f : [0, n- 1] \ ~ ~ $ , 반복 $ x_ {k + 1}= f (x_k) $ 은 결국주기. 지금 $ f $ 다항식으로 가져 가고 모듈로 $ n= p_1 p_2 \ dotsm p_r $ 을 고려하십시오. $ P_I $ 은 프레임입니다.

$ \ begin {방정식 *} x_ {k + 1} = f (x_k) \ bmod n. = f (x_k) \ bmod p_1 p_2 \ dotsm p_r \ end {방정식 *} $

이렇게하면 $ n $ 요인에있는 각각의 프레시스와 동일한 반복 구조 모듈러를 반복합니다.

우리는주기에 대해 아무것도 모른다. 그러나 $ x_0= x'_0 $ 과 :

을 쉽게 알 수있는 것이 쉽습니다. ....

$ \ begin {정렬 *} x_ {k + 1} &= f (x_k) \\ x '_ {k + 1} &= f (f (x'_k)) \ end {정렬 *} $

(즉, $ x '$ 가동) 결국 $ x'_k $ $ x_k $ 은 하나의 (또는 그 이상) 사이클 ( Floyd의 사이클 탐지 알고리즘 자세한 내용은 $ X'_k \ Equiv X_K \ MOD {P_I} $ , $ \ gcd (x'_k, x_k) $ $ n $ 의 요인이 될 것입니다. 비 - 사소한 것.

다항식 작품이지만, 우리는 환원 불가능한 것들 (아직 사소한 요인이 없으며, 운동의 지점이 아닌 것으로 탐지합니다). 선형 다항식은 계수를 제공하지 않습니다. 다음은 2 차 하나입니다. 그러나 $ x ^ 2 $ 은 (축소 가능)이므로 < SPAN 클래스="수학 용기"> $ x ^ 2 + 1 $ 단순화. 여기에있는 아이디어가 매우 큰 숫자로 일하는 것입니다. 소수의 산술 작업은 별개의 보너스입니다. 알고리즘 (예 : Knuth의 "Seminumerical Algorithms") 모델 $ F (x) \ bmod P $ 을 무작위 함수로 설명 할만 큼 충분히 가깝습니다. 알고리즘의 전반적인 특성.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top