최대공약수 최소공배수 계산기 (소인수분해)

여러 수의 최대공약수와 최소공배수, 소인수분해, 약수 목록과 소수 여부를 계산합니다. 큰 수도 정확하게.

최대 1,000개, 한 수에 300자리까지. 음수와 0도 넣을 수 있습니다. 한 수만 넣으면 소인수분해·약수·소수 판정을 보여 줍니다.

최대공약수 (GCD)-
최소공배수 (LCM)-

계산 방법

최대공약수: 유클리드 호제법

두 수 a, b(a ≥ b)에서 a를 b로 나눈 나머지를 r이라 하면 gcd(a, b) = gcd(b, r)입니다. 나머지가 0이 될 때까지 반복하면 마지막으로 나눈 수가 최대공약수입니다. 예: gcd(1071, 462) → 1071 = 2 × 462 + 147 → 462 = 3 × 147 + 21 → 147 = 7 × 21 + 0, 따라서 21입니다. 소인수분해 없이 나눗셈만 쓰므로 수백 자리 수도 순식간에 계산됩니다.

최소공배수

lcm(a, b) = |a × b| ÷ gcd(a, b)입니다. 곱이 너무 커지지 않도록 a ÷ gcd를 먼저 한 뒤 b를 곱합니다. 세 수 이상은 lcm(lcm(a, b), c)처럼 차례로 구합니다. 두 수의 최대공약수와 최소공배수를 곱하면 항상 두 수의 곱(절댓값)과 같습니다.

소인수분해와 소수 판정

먼저 1만 이하의 소수로 나눠 작은 소인수를 떼어 내고, 남은 수가 소수인지 밀러–라빈 판정으로 확인합니다. 합성수이면 폴라드 로(Pollard rho) 알고리즘으로 약수를 찾아 계속 쪼갭니다. 모든 계산은 자바스크립트 BigInt 정수로 하므로 2⁵³(약 9,007조)을 넘는 수도 반올림 없이 정확합니다.

최대공약수·최소공배수 예시

최대공약수최소공배수
12, 18636
8, 12, 204120
48, 18012720
24, 36, 6012360
17, 311527
360, 8401202,520
1071, 4622123,562
2, 3, 4, 5, 6, 7, 8, 9, 1012,520

소인수분해 예시

소인수분해약수 개수소수
122² × 36합성수
602² × 3 × 512합성수
3602³ × 3² × 524합성수
1,0242¹⁰11합성수
2,0262 × 10134합성수
9,97399732소수
720,7202⁴ × 3² × 5 × 7 × 11 × 13240합성수
600,851,475,14371 × 839 × 1471 × 685716합성수
9,007,199,254,740,9916361 × 69431 × 203944018합성수

표는 페이지를 만들 때 위 계산기와 같은 코드로 계산했습니다. 9,007,199,254,740,991은 자바스크립트 일반 숫자로 정확히 다룰 수 있는 가장 큰 정수(2⁵³ − 1)입니다.

0과 음수 처리 규칙

자주 묻는 질문

최대공약수와 최소공배수는 어떻게 구하나요?

가장 빠른 방법은 유클리드 호제법입니다. 큰 수를 작은 수로 나눈 나머지로 계속 바꿔 가다 나머지가 0이 되면 그때 나누던 수가 최대공약수입니다(48과 18 → 18과 12 → 12와 6 → 6). 최소공배수는 두 수의 곱을 최대공약수로 나눠 구합니다(48 × 18 ÷ 6 = 144). 세 수 이상은 앞에서부터 두 개씩 차례로 계산합니다.

0이나 음수를 넣으면 어떻게 계산하나요?

음수는 부호를 떼고 절댓값으로 계산하므로 결과는 항상 0 이상입니다. 0은 모든 정수의 배수라서 gcd(0, 12) = 12이고, 0이 하나라도 있으면 최소공배수는 0입니다. 모두 0이면 최대공약수를 관례에 따라 0으로 표시합니다. 소인수분해는 음수일 때 앞에 −1을 붙이고, 0과 1은 분해하지 않습니다.

약수의 개수를 빠르게 세는 공식이 있나요?

소인수분해 결과의 지수에 각각 1을 더해 곱하면 됩니다. 360 = 2³ × 3² × 5이면 (3+1) × (2+1) × (1+1) = 24개입니다. 이 계산기는 약수 목록도 함께 보여 주는데, 약수가 1만 개를 넘는 수는 목록 대신 개수만 표시합니다.

아주 큰 수도 소수인지 확인할 수 있나요?

300자리까지 넣을 수 있습니다. 25자리(약 3.3 × 10²⁴) 미만은 밀러–라빈 판정을 정해진 밑 13개로 하므로 결과가 확실합니다. 그보다 큰 수는 밑을 25개로 늘린 확률적 판정이라 "확률적 판정"이라고 함께 표시하며, 합성수를 소수로 잘못 판정할 가능성은 실제로 무시해도 될 만큼 작습니다.

소인수분해 결과에 괄호로 된 큰 수가 남는 건 왜인가요?

두 개의 큰 소수를 곱한 수는 컴퓨터로도 분해하기 매우 어렵습니다(인터넷 암호가 이 원리를 씁니다). 이 계산기는 브라우저가 멈추지 않도록 일정 횟수까지만 시도하고, 그 안에 쪼개지 못한 합성수는 괄호로 남겨 둡니다. 가장 작은 소인수가 12자리 정도 이하면 대부분 끝까지 분해되고, 2⁵³ 이하의 수는 항상 즉시 분해됩니다.

이 도구가 도움이 되었다면 공유해 주세요

계산 결과가 이상한가요? 알려 주세요.

계산 결과는 참고용이며 법적 효력이 없습니다.

다른 도구