큰 수 계산기
부동소수점 한계를 넘는 정수 연산: 산술, 거듭제곱, 근, 팩토리얼, 최대공약수, 최소공배수, 소인수분해. 100!의 158자리를 모두 정확히 표시합니다.
입력하면 결과가 갱신됩니다. Ctrl/Cmd+Enter로 주요 결과 복사.
결과
—
비트 보기
풀이 보기
큰 수 계산기는 일반 부동소수점 계산기가 담을 수 없는 값에 대해 정확한 정수 연산을 수행합니다. 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 거듭제곱, 정수 근, 팩토리얼, 최대공약수, 최소공배수, 시행 소인수분해는 모두 과학적 근사값이 아니라 전체 자릿수열을 반환합니다. 자릿수와 선택적 정밀도 설정이 모든 결과에 함께 표시되어 답의 크기를 한눈에 볼 수 있습니다.
계산은 모두 브라우저에서 실행됩니다. 입력 내용이 서버로 전송되지 않습니다.
표준 정밀도를 넘는 수로 계산하기
임의 정밀도 정수는 메모리가 허용하는 한 커집니다. 10진 자릿수열로 피연산자를 입력하거나, 16진·2진 입력이 편할 때는 0x / 0b 접두사를 쓰고 연산을 선택합니다. 주 출력은 정확한 결과이고, 보조 필드에는 자릿수가 표시됩니다.
암호학이나 조합론이 신경 쓰기 훨씬 전부터 표준 계산기는 정확성을 잃습니다. 팩토리얼, 큰 거듭제곱, 많은 항의 곱은 IEEE 부동소수점을 무한대로 넘치게 하거나 하위 자릿수를 반올림합니다. 이 도구는 정수 결과의 모든 자릿수를 유지하는 것이 이 페이지의 목적입니다.
일반 계산기가 정확도를 잃는 지점 이해하기
IEEE-754 배정밀도는 약 15~17자리의 유효 10진 자릿수를 담습니다. 2⁵³ (9,007,199,254,740,992)보다 큰 정수는 double에서 모두 정확히 표현할 수 없습니다. 그 이후 홀수 정수는 가까운 짝수로 반올림됩니다. double을 쓰는 pocket 계산기와 스프레드시트 셀은 큰 정수에서 조용히 틀립니다.
2^53 = 9007199254740992 double이 정확히 담는 마지막 연속 정수
2^53 + 1 double에서는 2^53과 구별 불가
부동소수점 곱셈과 나눗셈은 소수 결과에서도 반올림 오차를 만듭니다. 큰 수 계산기는 big-integer 연산으로 정수 연산에서 그 종류의 오차를 피합니다. 비정수 근과 나눗셈은 결과가 본질적으로 유한 자릿수열이 아니므로 정밀도 설정이 필요합니다.
매우 큰 정수로 산술 연산하기
덧셈, 뺄셈, 곱셈, 나눗셈, 나머지는 수백 또는 수천 자릿수의 피연산자를 받습니다. 나눗셈은 정수 몫을 반환하고, 나머지는 엔진의 일반적인 부호 규칙을 따릅니다. 100자리 두 수를 곱하면 최대 200자리 곱이 나오며, 과학적 표기법이 중간을 숨기지 않습니다.
빌림과 올림은 손계산과 같은 규칙을 따르며 자릿수 배열 전체로 확장됩니다. 숙제와 프로그래밍 대회에서 흔한 크기에서는 성능이 대화형으로 유지됩니다. 수만 자릿수의 극단적 입력은 브라우저가 처리하는 동안 탭이 잠시 멈출 수 있습니다. 페이지가 응답하지 않으면 더 작은 경우로 취소 후 다시 시도하세요.
거듭제곱, 제곱근, 팩토리얼 계산하기
거듭제곱은 음이 아닌 정수 지수의 base^exponent를 계산해 정확한 정수 결과를 반환합니다. 정수 제곱근은 진근의 바닥값을 반환하고 나머지를 표시할 수 있습니다. 팩토리얼 n!은 1부터 n까지 모든 정수를 곱해 전체 자릿수열을 반환합니다. 100!은 158자리로, double이 정확히 저장할 수 있는 범위를 훨씬 넘습니다.
100!은 158자리입니다. 앞자리는 9332621544…이고 전체 문자열은 손으로 쓰기엔 너무 깁니다. 그래서 계산기가 있습니다. 자릿수만으로도 많은 대회 확인에 답할 수 있습니다. 100!이 256비트 레지스터에 맞는지 묻는 문제에서 158의 10진 자릿수면 이미 충분히 판단할 수 있습니다 (256비트는 최대 78의 10진 자릿수만 담습니다).
| n | n! (끝 형태) | 자릿수 |
|---|---|---|
| 10 | 3,628,800 | 7 |
| 20 | 2,432,902,008,176,640,000 | 19 |
| 50 | (길음) | 65 |
| 100 | (길음) | 158 |
음수 팩토리얼은 정수에 대해 정의되지 않습니다. 매우 큰 n은 결국 브라우저 메모리를 고갈시킵니다. 도구는 잘린 값을 반환하지 않고 실패를 보고합니다.
최대공약수와 최소공배수 구하기
최대공약수는 유클리드 알고리즘을 사용합니다. 큰 수를 나눗셈 나머지로 바꾸고 나머지가 0이 될 때까지 반복합니다. 마지막 0이 아닌 나머지가 최대공약수입니다. 최소공배수는 LCM(a, b) = |a × b| / GCD(a, b)로 구하며, 곱이 넘치지 않도록 big-integer 곱셈을 씁니다.
서로소인 정수의 최대공약수는 1입니다. 분수나 화면비를 약분하는 것은 두 항에 대한 최대공약수 나눗셈입니다. 화면비 계산기가 그 UI를 담당하고, 이 페이지는 임의 정수용 원시 최대공약수·최소공배수 연산을 제공합니다. 1920과 1080을 입력하면 최대공약수 120이 나오며, Full HD 프레임을 16:9로 약분하는 것과 같은 인수입니다.
큰 수의 소인수 구하기
시행 나눗셈은 작은 소인수를 벗기고, 남은 여인수가 소수이거나 탐색 한계에 도달할 때까지 위로 계속합니다. 두 큰 소수로 만든 반소수가 어려운 경우입니다. 시행 나눗셈은 브라우저에서 대화형으로 끝나지 않으며, 페이지는 조용히 멈추지 않고 그 한계를 명시합니다.
| 입력 | 인수 |
|---|---|
| 12 | 2² × 3 |
| 97 | 97 (소수) |
| 1,001 | 7 × 11 × 13 |
계산기는 한계를 솔직히 밝힙니다. 작은 인수를 가진 수는 빠르게 인수분해됩니다. RSA 모듈러스 같은 구조의 수는 대화형 시간에 끝나지 않으며, 그것이 예상됩니다. 암호는 그 어려움에 의존합니다. 중간 크기 합성수를 다루는 교육·대회 문제에는 인수분해 보기로 충분합니다.
비정확한 결과의 정밀도 설정하기
완전제곱수가 아닌 수의 제곱근과 정수로 떨어지지 않는 나눗셈에는 정밀도 설정이 필요합니다. 반올림 전에 계산할 유효 자릿수입니다. 전체 자릿수열이 다루기 어려울 때 매우 크거나 작은 크기에는 과학적 표기법을 쓸 수 있습니다.
정수 전용 연산은 정밀도 제어를 무시합니다. 답이 유한하기 때문입니다. 모드를 섞는 것은 흔한 실수입니다. 정밀도를 10으로 설정해도 100!은 잘리지 않습니다. 팩토리얼은 여전히 158자리 전체를 반환합니다. 정밀도는 근사 연산에만 적용됩니다.
실무에서 큰 수 사용하기
암호는 키 크기를 비트로 말합니다. 2048비트 RSA 모듈러스는 대략 617자리 10진 정수입니다. 조합론은 팩토리얼과 이항 계수를 만들어 64비트 레지스터를 즉시 넘깁니다. 경쟁 프로그래밍 문제는 종종 소수 modulo 답을 요구하며, 약분 전에는 여전히 큰 중간 곱이 필요합니다.
언어가 내장 big-integer 타입 (Python int, Java BigInteger, JavaScript BigInt)을 제공하면, 이 계산기는 그 프로그램을 확인하는 메모장입니다. 언어가 double에 묶여 있으면, 계산기는 정확한 값이 무엇이어야 했는지의 기준이 됩니다.
자주 묻는 질문
일반 계산기는 큰 정수에서 왜 실패하나요?
double은 약 15~17자리 유효 자릿수만 유지하고 2⁵³보다 큰 모든 정수를 표현할 수 없습니다. 큰 정수는 반올림되므로 표시는 정확해 보여도 하위 자릿수는 틀립니다.
100!은 몇 자리인가요?
100!은 158자리입니다. 큰 수 계산기는 전체 정수를 반환하고 보조 필드에서 그 자릿수를 보고하며, 테스트에 쓰는 엔진 fixture와 일치합니다.
임의 정밀도란 무엇인가요?
임의 정밀도는 64비트 같은 고정 레지스터에 맞추는 대신 필요에 따라 자릿수가 커진다는 뜻입니다. 메모리가 바닥날 때까지 정수 연산 결과는 정확합니다.
최대공약수는 어떻게 계산하나요?
유클리드 알고리즘은 큰 수를 작은 수로 나눈 나머지로 반복 교체하고 나머지가 0이 될 때까지 진행합니다. 마지막 0이 아닌 나머지가 최대공약수입니다. 최소공배수는 그다음 곱을 최대공약수로 나눠 구합니다.
계산기는 어떤 수든 인수분해할 수 있나요?
아니요. 시행 나눗셈은 작은 소인수를 가진 수를 처리합니다. RSA에 쓰이는 종류의 두 큰 소인수 반소수는 브라우저에서 대화형 시간에 인수분해되지 않으며, 페이지도 그렇게 가장하지 않습니다.
거듭제곱은 항상 정확한 결과를 반환하나요?
음이 아닌 정수 지수의 정수 거듭제곱은 정확한 정수를 반환합니다. 분수 지수와 비정수 근은 정밀도 설정을 쓰며 반올림할 수 있습니다. 음수 지수는 일반적으로 정수가 아닌 역수를 만듭니다.
어떤 입력 형식을 받나요?
10진 자릿수열이 기본입니다. 접두사 0x와 0b로 같은 연산에 16진·2진 정수 입력이 가능합니다. 천 단위 구분 쉼표는 필요 없으며 필드 파서에 따라 거부될 수 있습니다.
계산이 서버에 업로드되나요?
아니요. big-integer 작업은 브라우저에서 실행됩니다. 큰 중간값은 기기를 벗어나지 않습니다. 피연산자가 숙제 키나 로컬 실험 데이터에서 올 때 중요합니다.
JavaScript BigInt와 어떤 관계인가요?
엔진은 BigInt와 같은 정신으로 big-integer 연산을 사용합니다. 정확한 정수, 부동소수점 반올림 없음. 이 페이지는 자릿수, 팩토리얼, 인수분해 도우미가 붙은 UI입니다.
언제 정밀도를 올려야 하나요?
비교나 출력에 더 많은 유효 자릿수가 필요할 때 근과 비정확 나눗셈의 정밀도를 올리세요. 정수 팩토리얼, 최대공약수, modulo 연산은 그 설정을 쓰지 않습니다.
요약
큰 수 계산기는 double이 대략 15자리 유효 숫자와 2⁵³을 넘어 자릿수를 잃는 곳에서 정확한 정수 결과를 유지합니다. 산술, 거듭제곱, 팩토리얼, 최대공약수, 최소공배수, 시행 인수분해는 로컬에서 실행되며 100!은 158자리 정수로 보고됩니다. 정밀도 제어는 비정수 근과 나눗셈에만 적용됩니다. 암호 규모 인수분해는 대화형 시행 나눗셈 범위 밖임을 인정합니다.