팩토리얼 계산기
범위: 0 ~ 170 (JavaScript 제한)
📊 결과
📝 단계별 계산:
🎨 시각적 곱셈 트리
🎯 순열 & 조합
🔄 순열 P(n,r)
💡 순서가 중요함: ABC ≠ BAC
🎲 조합 C(n,r)
💡 순서가 중요하지 않음: ABC = BAC
📋 팩토리얼 참고 표
| n | n! | 자릿수 | 실생활 예시 |
|---|
💡 흥미로운 사실
🃏 카드 섞기
52! ≈ 8.07 × 10⁶⁷ 가지의 가능한 배열이 있습니다. 지구의 모든 사람이 빅뱅 이후 초당 한 번씩 한 덱을 섞었다고 해도, 가능성의 일부만 겨우 확인하는 수준입니다!
🎭 극장 좌석 배치
10명은 10! = 3,628,800 가지 방식으로 앉을 수 있습니다. 운영/배치는 기하급수적으로 복잡해집니다!
📊 0! = 1
정의에 따라 0! = 1 입니다. 0개를 배열하는 방법은 “아무것도 하지 않기” 단 1가지뿐입니다. 덕분에 수식이 일관되게 성립합니다.
🚀 증가 속도
팩토리얼은 지수 함수보다도 더 빠르게 증가합니다! 2ⁿ은 두 배씩 늘지만, n!은 점점 커지는 수로 계속 곱해집니다. 100!은 158자리입니다!
팩토리얼 계산기 - 단계별로 n! 계산
🔢 0부터 170까지 어떤 숫자든 팩토리얼(n!)을 계산하세요. 단계별 풀이, 순열·조합, 그리고 실생활 응용까지 확인할 수 있습니다.
팩토리얼(계승)이란?
음이 아닌 정수 n의 팩토리얼(표기: n!)은 n 이하의 모든 양의 정수를 곱한 값입니다. 이는 서로 다른 n개의 물체를 배열하는 방법의 수를 나타냅니다.
팩토리얼 공식
n! = n × (n-1) × (n-2) × ... × 3 × 2 × 1
- 0! = 1 (정의)
- 1! = 1
- n! = n × (n-1)! (재귀 정의)
팩토리얼 예시
- 5! = 5 × 4 × 3 × 2 × 1 = 120
- 10! = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 3,628,800
- 0! = 1 (특수한 경우)
- 20! = 2,432,902,008,176,640,000
왜 0! = 1 인가요?
0개의 물체를 배열하는 방법은 “빈 배열(아무것도 하지 않기)” 단 1가지뿐입니다. 이 정의는 (특히 조합론에서) 수식이 올바르게 동작하도록 보장합니다. 또한 재귀식 n! = n × (n-1)! 에서 1! = 1 × 0! 이므로 0!은 1이어야 합니다.
순열
P(n,r) = n!/(n-r)!
서로 다른 n개 중 r개를 뽑아 배열하는 방법의 수(순서가 중요).
- 예: P(5,3) = 5!/(5-3)! = 120/2 = 60
- 활용: 경기 시상대 순위(1등, 2등, 3등)
조합
C(n,r) = n!/(r!(n-r)!)
서로 다른 n개 중 r개를 선택하는 방법의 수(순서가 중요하지 않음).
- 예: C(5,3) = 5!/(3!×2!) = 120/(6×2) = 10
- 활용: 로또 번호, 위원회 선출
n!의 끝자리 0 개수
끝자리 0은 10 = 2 × 5의 인수에서 생깁니다. 2는 항상 5보다 많으므로, 5의 개수만 세면 됩니다:
0의 개수 = ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ...
- 10!은 끝자리 0이 2개
- 25!는 끝자리 0이 6개
- 100!은 끝자리 0이 24개
실생활 응용
- 암호학: 가능한 암호 키 개수
- 스케줄링: 일정/작업/이벤트 배열
- 유전학: 가능한 DNA/단백질 서열
- 확률: 게임/복권의 확률 계산
- 컴퓨터 과학: 알고리즘 복잡도 분석
- 제조: 생산 라인 배치
- 물류: 경로 최적화 문제
유명한 팩토리얼 값
- 52! ≈ 8.07 × 10⁶⁷ (카드 섞기)
- 70! ≈ 1.2 × 10¹⁰⁰ (우주 원자 수 ≈ 10⁸⁰ 초과)
- 100! ≈ 9.3 × 10¹⁵⁷ (158자리!)
- 170! ≈ 7.3 × 10³⁰⁶ (JavaScript 최대)
스털링 근사(Stirling's Approximation)
큰 n에서는 정확한 팩토리얼 계산이 비실용적입니다. 스털링 근사는 다음과 같습니다:
n! ≈ √(2πn) × (n/e)ⁿ
n이 커질수록 근사 정확도가 좋아집니다. n = 10에서 오차는 1% 미만입니다.
팩토리얼 증가 속도 비교
팩토리얼은 지수/다항 함수보다 훨씬 빠르게 증가합니다:
- 다항: n² = 100 (n=10)
- 지수: 2ⁿ = 1,024 (n=10)
- 팩토리얼: n! = 3,628,800 (n=10)
이중 팩토리얼
이중 팩토리얼(n!!)은 한 칸씩 건너뛰며 곱합니다:
- n!! = n × (n-2) × (n-4) × ... × 2 또는 1
- 7!! = 7 × 5 × 3 × 1 = 105
- 8!! = 8 × 6 × 4 × 2 = 384
부분 팩토리얼(완전 순열 / Derangements)
부분 팩토리얼 !n은 어떤 원소도 원래 위치에 오지 않는 순열의 개수입니다:
!n = n! × (1/0! - 1/1! + 1/2! - 1/3! + ... + (-1)ⁿ/n!)
예: !3 = 2 (ABC에서 어떤 글자도 제자리 아닌 배열: BCA, CAB)
프로그래밍 구현
반복(Iterative) 방식:
function factorial(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
재귀(Recursive) 방식:
function factorial(n) {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
💡 팁: 순열/조합을 계산할 때는 오버플로를 피하기 위해 큰 팩토리얼을 직접 계산하기 전에 공통 인수를 약분하세요. 예를 들어 C(100,2) = 100!/(2!×98!)는 (100×99)/2 = 4,950로 계산할 수 있습니다!
댓글 (0)
의견을 남겨 주세요. 예의를 지키고 주제에서 벗어나지 말아 주세요.
댓글을 남기려면 로그인