큰 정수를 인수 분해하는 것이 어려운 이유는 무엇입니까?


17

발견 된 가장 효율적인 알고리즘이 시간 의 요인을 계산할 수 있지만 어딘가에 작성한 코드는 O ( n ) 또는 분할과 계수가 얼마나 빠른지에 따라 아마도 O ( n log n ) 어딘가에 대해 잘못 이해했다고 확신하지만 어디에서 잘 모르겠습니다 여기 의사 코드 형식으로 작성했습니다.O(exp((64/9b)1/3(logb)2/3)O(n)O(nlogn)

function factor(number) -> list
    factors = new list
    if number < 0
        factors.append(-1)
        number = -number
    i = 2
    while i <= number
        while number % i == 0
            factors.append(i)
            number /= i
        i++
    return factors

3
구글 "의사 다항식".
Raphael

이 알고리즘은 실제로 매우 느립니다. 숫자가 소수이면 루프가 반복되는 동안 (숫자) 반복됩니다. sqrt (숫자) 반복을 피할 수있는 매우 간단한 인수가 있습니다.
gnasher729

답변:


26

숫자 n 을 나타내는 데 필요한 비트 수를 혼동하고 있습니다. 여기서 B = 나타내는데 필요한 비트 수를 N (그래서 B 엑스 없음을 ). 이것은 큰 차이를 만듭니다. O ( N은 ) - 시간의 알고리즘 A는 O ( 2 B ) 비트의 수가 지수 적 - - 시간 알고리즘. 이에 비해, 발견 한 "효율적인"알고리즘의 실행 시간은 b의 하위 지수입니다 .nnb=nblgnO(n)O(2b)b

예 : (2 백만)을 고려하십시오 . 그런 다음 b = 21 비트이면 숫자 n 을 나타내기에 충분합니다 . 그래서, 인 알고리즘 O는 ( 2 b를 1 / 3 ) 훨씬 빠르다 알고리즘보다 것이다 O ( 2 (B) ) . O ( N ) 알고리즘은 즉, 아주 천천히, 후자의 범주에 빠진다.n=2,000,000b=21nO(2b1/3)O(2b)O(n)

https://en.wikipedia.org/wiki/Integer_factorization을 참조 하십시오


1
나는 그것이 그렇게 간단한 것을 알았습니다.
EnderShadow

3
>1,000 (즉 >21,000) 그 쯤. 컴퓨터가 컴퓨터를 실행할 수 있다고 가정하면영형() 초당 10 억회 반복 알고리즘은 몇 년이 걸리는지 계산합니다. 21,000. (당신의 첫 반응이 "그게 잘 될 수 없습니다!", 당신은 아마 그것을 정확하게 계산했습니다.)
Ilmari 카로 넨

1

여기에는 대략 두 가지 질문이 있습니다. 코드에 대한 일반적인 질문과 구체적인 질문입니다. 특정 답변은 다른 답변에서 처리됩니다. 팩토링의 복잡성에 대한 제목의 일반적인 질문은 매우 깊습니다. 불행히도 팩토링은 (많은 상황에서) "많은 전문가들이 시도하고 실패한 것"이외의 P 외부에 있다는 강력한 과학적 증거는 없으며 일부 전문가들은 P 내부에 있다고 추측한다. 그것은 복잡성 이론의 가장 큰 (그리고 해결하기 어려운) 열린 문제 중 하나로 여겨진다. 수십 년 동안의 "중공 격 공격"이후 최고의 알고리즘은 기하 급수적입니다. 팩토링 복잡도는 P와 NP 가 " 완전한 " 것으로 알려져 있지만 지금까지 분류되지 않은 "몇 가지 예외적 인 문제" 중 하나입니다.

지적한 바와 같이, 복잡성은 암호화 보안이 가정에 의존하는 1980 년대 중반 RSA 암호 시스템 에서 사용되기 전까지는 거의 문제가되지 않았다 . (다른 두 가지 "정확히 장려하지 않는"관련 데이터 포인트 : P- 시간 양자 팩토링 및 원시성 테스트를위한 Shors 알고리즘 은 유명한 / 유명한 AKS 알고리즘 에서 2000 년대 초 P로 입증되었습니다 .) 가능한 긍정적 인 결과는 다음과 같습니다. 그것의 quasipolynomial 시간 NP 완료 (P ≠ NP 가정 및 NP의 완료는 것보다 약한, 지수 하한 시간 ) 만, 여전히 기술적으로 "하드".

지금까지이 주요 subj에 대한 훌륭한 조사를 찾지 못했습니다. 그러나 참조


다소 겉보기에 "가장자리가 높은"시나리오는 팩토링이 P에있을 수 있지만 여전히 실행 가능한 알고리즘은 없다는 것입니다. 일명 은하 알고리즘
vzn

RSA는 두 개의 큰 소수의 곱을 고려하는 것에 관한 것입니다 (누군가는 소수를 알고 있고 곱한 경우, 다른 사람은 그 결과를 얻었고 소수를 찾아야합니다). 두 개의 큰 소수의 곱을 인수 할 수 있지만 두 개의 큰 소수의 곱을 인수 분해 할 수있는 알고리즘이있을 수 있습니다 . 큰 소수 (그러나 사전에 큰 소수라고 알려지지 않은)를 인수 분해하여 다항식 시간에 수행 할 수있는 것처럼.
gnasher729
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.