팩토리얼 계산기 쉽게 이해하기 — 개념과 원리
자연수 n의 팩토리얼(계승) n!은 1부터 n까지의 모든 자연수를 곱한 값입니다. 서로 다른 n개를 한 줄로 늘어놓는 방법의 수와 같아서 순열, 조합, 확률, 급수 전개의 바탕이 됩니다. 이 계산기는 25!까지는 정확한 값을, 그보다 크면 과학적 표기로 n!을 보여 주며, n!의 자릿수와 이중 팩토리얼 n!!도 함께 계산합니다.
계산 방법
- 팩토리얼: n! = 1 × 2 × 3 × … × n이며, 0! = 1입니다.
- 자릿수: ⌊log₁₀(n!)⌋ + 1입니다. log₁₀(n!)는 ln(n!) ÷ ln 10으로 구하므로 아주 큰 팩토리얼도 직접 쓰지 않고 자릿수를 알 수 있습니다.
- 이중 팩토리얼: n!! = n × (n − 2) × (n − 4) × …이며, n이 짝수면 2, 홀수면 1에서 멈춥니다.
n은 0 이상 1,000,000 이하의 정수이고, 이중 팩토리얼은 n이 60 이하일 때 표시됩니다.
원리
서로 다른 n개를 늘어놓을 때 첫째 자리에는 n가지, 둘째 자리에는 n − 1가지, 마지막 자리에는 1가지를 고를 수 있습니다. 이 경우의 수를 모두 곱하면 n!입니다. n! = n × (n − 1)!라는 관계에서 1! = 1 × 0!이므로 0! = 1이어야 하고, 아무것도 없는 것을 늘어놓는 방법도 한 가지라고 볼 수 있습니다. 팩토리얼은 어떤 지수함수보다도 빠르게 커집니다. 스털링 근사 n! ≈ √(2πn)(n/e)ⁿ은 이 증가를 잘 나타내며, n = 20에서 이미 오차가 약 0.4%에 불과합니다.
예제 풀이
- 입력값: n = 20입니다.
- 1 × 2 × … × 20 = 2432902008176640000(약 2.43 × 10¹⁸)입니다.
- log₁₀(20!) ≈ 18.386이므로 자릿수는 ⌊18.386⌋ + 1 = 19입니다.
- 이중 팩토리얼 20!! = 20 × 18 × … × 2입니다. 각 인수는 2 × (1~10)이므로 20!! = 2¹⁰ × 10! = 1,024 × 3,628,800 = 3715891200입니다.
| n | n! |
|---|---|
| 5 | 120 |
| 10 | 3628800 |
| 15 | 1307674368000 |
| 20 | 2432902008176640000 |
| 25 | 15511210043330985984000000 |
| 30 | 2.65252860e+32 |
| 40 | 8.15915283e+47 |
결과 해석
자릿수를 보면 팩토리얼이 얼마나 빨리 커지는지 알 수 있습니다. 10!은 7자리, 20!은 19자리, 100!은 158자리입니다. 20!은 20명이 한 줄로 서는 순서의 가짓수로, 하나씩 시도해 보는 것은 사실상 불가능한 규모입니다. 25!을 넘으면 과학적 표기로 바뀌므로 앞자리 숫자만 보입니다.
흔한 실수
- 0! = 0으로 생각하는 경우입니다. 정의에 따라 1입니다.
- n!!를 (n!)!로 읽는 경우입니다. 이중 팩토리얼은 하나씩 건너뛰며 곱하므로 n!보다 훨씬 작습니다.
- 음수나 분수에 팩토리얼을 적용하는 경우입니다. 이때는 Γ(n + 1) = n!인 감마함수를 씁니다.
- 약분을 잘못하는 경우입니다. 10! ÷ 8!은 10 ÷ 8이 아니라 10 × 9 = 90입니다.
자주 묻는 질문
0!은 왜 1인가요?
n! = n × (n − 1)! 관계가 깨지지 않게 하고, 공집합을 늘어놓는 방법이 한 가지라는 사실과도 맞기 때문입니다. 덕분에 nC0 = 1 같은 공식도 성립합니다.
n! 끝에 0은 몇 개 붙나요?
인수 5의 개수를 세면 됩니다. ⌊n/5⌋ + ⌊n/25⌋ + …이며, 20!은 4개로 실제 값의 끝자리 0 네 개와 일치합니다.
소수의 팩토리얼도 있나요?
경우의 수로서는 없지만 감마함수로 넓힐 수 있습니다. 예를 들어 Γ(1.5) = (0.5)! = √π ÷ 2 ≈ 0.8862입니다.
출처: Donald E. Knuth, The Art of Computer Programming, Vol. 1, §1.2.5 (Permutations and Factorials) · NIST Digital Library of Mathematical Functions, §5.11