도구스학업·수학

폴라드 로 소인수분해 계산기

시행나눗셈으로는 오래 걸리는 큰 수를 폴라드 로 알고리즘으로 소인수분해합니다. 반복 횟수를 √n과 견주어 얼마나 적게 드는지 보이고, 밀러–라빈 결정적 판정으로 각 인수가 정말 소수인지까지 확인합니다.

10¹⁹ 이하의 자연수

소인수분해

1000000007 × 1000000009

검산: 다시 곱하면 원래 수가 됩니다

소인수1000000007 × 1000000009
소인수 개수 (중복 포함)2
약수 개수4
약수의 합1,000,000,018,000,000,080
오일러 파이 φ(n)1,000,000,014,000,000,048
폴라드 로 반복 횟수27,573
시행나눗셈이었다면 (√n)1,000,000,008
몇 배 적은가36,267배
작은 소수로 먼저 걸러낸 것없음
시도c반복결과
1127,5731000000007
계산 근거x ← x² + c (mod n) 을 거북이는 한 걸음, 토끼는 두 걸음씩
d = gcd(|x_거북이 − x_토끼|, n)
1 < d < n이면 d가 인수다
소수 판정은 밀러–라빈으로 하되 밑을 {2,3,5,…,37}로 잡아 이 범위에서 «확정»으로 만들었습니다. 확률적 판정이 아닙니다.
왜 「로(ρ)」인가. x ← x² + c로 만든 수열은 값이 유한하니 언젠가 반드시 지났던 값으로 돌아옵니다. 처음 몇 걸음은 꼬리처럼 뻗다가 그 뒤로는 고리를 도는데, 그려 보면 그리스 문자 ρ 모양입니다. 여기까지는 아무 수열이나 그렇습니다.
핵심은 「p를 모르는 채로 p를 찾는다」는 것입니다. 같은 수열을 소인수 p로 나눈 나머지로 보면 값이 p 가지뿐이라 훨씬 짧은 고리를 돕니다. 생일 문제로 √p ≈ n^(1/4) 걸음이면 mod p에서 겹치는 두 값이 나오고, 그러면 그 차가 p의 배수이므로 gcd로 잡힙니다. 우리는 p를 계산에 쓴 적이 없는데도 p가 튀어나오는 것입니다. 지금 반복이 27,573번이었고, 시행나눗셈이었다면 1,000,000,008번을 나눠 봐야 했습니다.
실패하면 c를 바꿔 다시 돌립니다. gcd가 n 자체로 나오면(수열이 mod n 에서도 겹쳤다는 뜻) 아무것도 얻지 못합니다. 위 표에 그런 시도가 있다면 그것입니다. 그리고 n이 소수면 영원히 못 찾으므로 로를 돌리기 «전»에 반드시 소수 판정을 합니다.
RSA를 깨는 방법은 아닙니다. 폴라드 로는 n^(1/4)이라 20자리쯤까지가 실용적인 한계입니다. RSA-2048은 617자리라 이 방법으로는 우주의 나이보다 오래 걸립니다. 그런 크기는 수체 체(GNFS)를 쓰는데, 그것도 아직 2048비트를 깨지 못했습니다. 여기서 다루는 것은 「작은 수를 어떻게 «빨리» 쪼개는가」입니다.

계산 방법

  1. 1소인수분해할 수를 넣습니다. 10¹⁹까지 다룹니다.
  2. 2반복 횟수와 √n을 견주어 얼마나 덜 드는지 봅니다.
  3. 3시도 표에서 어떤 c로 성공했는지, 실패한 시도가 있었는지 확인합니다.
  4. 4검산 줄에서 인수를 다시 곱하면 원래 수가 되는지 봅니다.

자주 묻는 질문

x ← x² + c (mod n) 으로 의사난수열을 만들고, 두 값의 차와 n의 최대공약수를 봅니다. 같은 수열을 소인수 p로 나눈 나머지로 보면 값이 p가지뿐이라 훨씬 짧은 고리를 돌고, 생일 문제로 √p 걸음이면 겹치는 두 값이 나옵니다. 그 차가 p의 배수라 gcd로 잡힙니다.

수열이 그리는 모양 때문입니다. 값이 유한하니 언젠가 반드시 지났던 값으로 돌아오는데, 처음 몇 걸음은 꼬리처럼 뻗다가 그 뒤로는 고리를 돕니다. 그려 보면 그리스 문자 ρ와 같습니다.

시행나눗셈은 √n번, 폴라드 로는 n^(1/4)번쯤입니다. 19자리 수라면 30억 번 대 5만 번쯤으로 갈립니다. 이 계산기는 실제 반복 횟수와 √n을 함께 내어 그 차이를 보여 줍니다.

아닙니다. gcd가 n 자체로 나오면(수열이 mod n에서도 겹친 경우) 아무것도 얻지 못합니다. 그때는 상수 c를 바꿔 다시 돌립니다. 그리고 n이 소수면 영원히 못 찾으므로 로를 돌리기 전에 반드시 소수 판정을 해야 합니다.

이 범위에서는 확정입니다. 밀러–라빈의 밑을 {2,3,5,7,11,13,17,19,23,29,31,37}로 잡으면 3.3×10²⁴ 미만에서 틀릴 수 없다는 것이 알려져 있고, 이 계산기가 다루는 10¹⁹ 이하는 그 안에 듭니다. 카마이클 수처럼 페르마 검정을 속이는 수도 정확히 걸러냅니다.

없습니다. n^(1/4)이라 20자리쯤까지가 실용적인 한계입니다. RSA-2048은 617자리라 이 방법으로는 우주의 나이보다 오래 걸립니다. 그런 크기는 수체 체(GNFS)를 쓰는데 그것도 아직 2048비트를 깨지 못했습니다.

두 가지로 확인합니다. 찾은 인수를 모두 곱해 원래 수가 되는지 보고, 각 인수가 밀러–라빈으로 정말 소수인지 봅니다. 작은 수에서는 시행나눗셈 결과와도 대조했습니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어집니다. 이 도구는 큰 수를 다루므로 입력값을 이 기기에도 저장하지 않습니다.

알아두면 좋은 점

  • 10¹⁹ 이하의 자연수만 다룹니다. 그보다 크면 브라우저에서 오래 걸립니다.
  • gcd가 n 자체로 나오면 실패합니다. c를 바꿔 가며 최대 40번 다시 시도합니다.
  • 1000 미만의 소수로 먼저 걸러낸 뒤 로를 돌립니다.
  • 소수 판정은 이 범위에서 결정적입니다. 확률적 오류가 없습니다.
  • RSA 크기의 수는 다룰 수 없습니다. 20자리쯤이 한계입니다.
  • 같은 수라도 c를 고르는 순서에 따라 먼저 나오는 인수가 다를 수 있습니다.
  • 이 도구는 입력값을 기기에 저장하지 않습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.