숫자를 두 개 이상 입력하면 그 전부의 최대공약수(GCD)와 최소공배수(LCM)를 한 번에 구해 주는 도구입니다. 두 개까지만 받는 계산기가 많은데 여기서는 개수 제한 없이 넣을 수 있어요. 24 36 60처럼 공백으로 늘어놓아도 되고, 쉼표로 구분하거나 한 줄에 하나씩 붙여넣어도 그대로 인식합니다.
최대공약수는 유클리드 호제법으로 구합니다. 앞에서부터 두 수씩 짝지어 나머지를 반복해 나누는 방식이라, 소인수분해를 하지 않아도 큰 수에서 빠르게 답이 나옵니다. 최소공배수는 두 수의 곱을 최대공약수로 나눈 값을 누적하는 방식으로 계산하는데, 이 과정에서 자릿수가 폭발하는 것을 막으려고 자바스크립트의 BigInt를 씁니다. 그래서 여러 개의 큰 수를 넣어도 결과가 부동소수점 오차 없이 정확한 정수로 나옵니다.
결과 아래에는 계산 과정이 줄 단위로 펼쳐집니다. gcd(24, 36) = 12, gcd(12, 60) = 12처럼 어떤 짝을 어떤 순서로 처리했는지 그대로 보여 주기 때문에, 답만 확인하는 것을 넘어 풀이 과정을 검산하는 데에도 씁니다. GCD와 LCM 숫자를 클릭하면 그 값이 클립보드에 담깁니다.
A개수 제한을 두지 않았습니다. 두 개부터 계산되고, 열 개든 스무 개든 순서대로 짝지어 처리합니다. 다만 개수가 많으면 계산 과정 줄도 그만큼 길어집니다.
A0이 섞이면 최소공배수를 정의할 수 없어서 정수(0 제외)만 입력하라는 안내를 띄우고 계산을 멈춥니다. 0을 빼고 다시 넣어 주세요.
A됩니다. 계산 전에 절댓값으로 바꿔 처리하므로 -24와 24는 같은 결과를 냅니다. 결과 GCD·LCM은 항상 양수로 나옵니다.
A받지 않습니다. 최대공약수와 최소공배수는 정수에서 정의되는 개념이라 1.5 같은 값이 하나라도 있으면 오류 안내가 나옵니다.
A유클리드 호제법입니다. 큰 수를 작은 수로 나눈 나머지로 계속 바꿔 가다가 나머지가 0이 될 때의 값이 답이 됩니다. 소인수분해보다 훨씬 적은 단계로 끝나요.
A정확합니다. LCM 계산에는 BigInt를 써서 자바스크립트의 안전 정수 범위를 넘어서도 자릿수가 잘리거나 반올림되지 않습니다.
A현재까지의 최소공배수를 다음 숫자와의 최대공약수로 먼저 나눈 뒤 곱한다는 뜻입니다. 그냥 곱해 나가는 것보다 중간값이 훨씬 작아져 계산이 안정적입니다.
A보내지 않습니다. 호제법과 BigInt 연산 전부가 브라우저 안에서 돌아가고, 새로 열면 예시로 넣어 둔 24 36 60 상태로 돌아옵니다.