계승(수학)

최근 수정 시각: (5년 전)
팩토리얼에서 넘어옴
분류
목차
1. 개요2. 하강 계승 / 상승 계승3. 정의역의 확장4. 알고리즘5. 기타6. 관련 문서

1. 개요 [편집]

階乘, Factorial
수학 용어. 영단어 factorial [fækˈtɔ:riəl]을 소리나는 대로 쓴 '팩토리얼'[1]이라고 표기하기도 한다. 기억이 안 나면 느낌표라고 표현하기도 한다. 문화어로는 차례곱이라고 하는데 11부터 차례대로 곱한다는 의미[2]이다. 자연수 nn을 이용하여 기호로는 간단하게 n!n!로 나타내며 11부터 nn까지의 자연수를 모두 곱하는 것을 의미한다.

n!=k=1nk\displaystyle n! = \prod_{k=1}^n k로 나타내기도 하는데, k=1k=1부터 k=nk=n까지 합 연산을 의미하는 k=1n\displaystyle \sum_{k=1}^n처럼 \displaystyle \prod는 곱연산을 의미한다.

고등학교 교육과정에서는 중복 순열 기호로 왜 써야 하는지도 의문인 Π\Pi를 쓰는 것도 있고, 여러개의 항을 곱하는 것을 거의 다루지 않다 보니 곱의 기호 \displaystyle \prod를 가르치지 않기 때문에 계승을 접하는 확률과 통계, 수학 과목에서는 n!=1×2×3××(n1)×nn!=1 \times 2 \times 3 \times \cdots \cdots \times (n-1) \times n으로 배운다.
그러나 이중 계승(!!=!2!!=!_2)[3]이나 다중 계승(!!!!!k=!k\overbrace{!!! \cdots\cdots !!}^k = !_k)[4], 상승·하강 계승 등의 심화 개념을 이해하려면 식을 거꾸로 기억하는 것이 좋다.

그러니까 n!=i=0n1(ni)=n(n1)(n2)321\displaystyle n! = \prod_{i=0}^{n-1} \left(n-i\right) = n \left( n-1 \right) \left( n-2 \right) \cdots\cdots 3 \cdot 2 \cdot 1, 즉 n\boldsymbol n부터 1\boldsymbol 1씩 빼서 1\boldsymbol 1까지 곱하는 것으로 기억하자.

순열이나 조합조합론의 여러 분야에서 빈번하게 쓰이는 기호이기 때문에 nn의 범위는 일반적으로 음이 아닌 정수로 확장, 즉 n=0n=0을 포함하는데, 0!0!은 특별히 0!=10!=1로 정의한다. 예를 들자면 서로 다른 nn개의 물건에서 nn개를 모두 뽑아 나열하는 경우의 수(nPn{}_n\mathrm P_n)는 n!n!인데, nPr=n!(nr)!{}_n\mathrm P_r = \dfrac{n!}{\left( n-r \right)!}이므로 nPn=n!0!{}_n\mathrm P_n = \dfrac{n!}{0!}이며, 정의의 일관성을 유지하려면 0!=10!=1이어야 한다.
만약 0!10! \ne 1이라면 순열 뿐만 아니라 조합론의 거의 모든 개념에서 일일이 경우를 나눠서 재정의 해야할 것이다. n!=n×(n1)!n! = n \times \left( n-1 \right)! 등의 점화식 역시 0!=10!=1로 정의하면 자연수 범위에서 성립하는 걸로 만들 수 있다. 참고로 1!=11!=1이다.[5]

계승은 매우 빠른 속도로 증가한다. n=10n=10까지의 값은 다음과 같다.
nn
00
11
22
33
44
55
66
77
88
99
1010
n!n!
11
11
22
66
2424
120120
720720
50405040
4032040320
362,880362,880
3,628,8003,628,800

고작 10까지만 해도 벌써 백만 자리를 넘어간다.

2. 하강 계승 / 상승 계승 [편집]

하강 계승(Falling Factorial) nkn^{\underline{k}}은 계승의 정의 n!=i=0n1(ni)\displaystyle n! = \prod_{i=0}^{n-1}\left(n-i\right)에서 i=n1i=n-1까지가 아닌 i=k1i=k-1까지의 곱으로 정의된다. 즉,
nk=i=0k1(ni)=n(n1)(n2)(nk+2)(nk+1)=n!(nk)!\displaystyle n^{\underline{k}} = \prod_{i=0}^{k-1} \left(n-i\right) = n\left(n-1\right)\left(n-2\right)\cdots\cdots\left(n-k+2\right)\left(n-k+1\right) = \frac{n!}{(n-k)!}
과 같다. 그런데 n!(nk)!=nPk\dfrac{n!}{(n-k)!} = {}_n\mathrm P_k이므로 하강 계승은 곧 순열 nPk{}_n\mathrm P_k와 동치임을 알 수 있다. 조합 기호 (nk)=nPkk!\dbinom nk = \dfrac{{}_n\mathrm P_k}{k!}을 이용하면 nk=k!(nk)n^{\underline{k}} = k!\dbinom nk로도 나타낼 수 있다.

이와 비슷하게 상승 계승(Rising Factorial) nkn^{\overline{k}}은 하강 계승의 부분곱 식에서 (ni)(n-i)(n+i)(n+i)로 바꾼 식으로 정의된다.
nk=i=0k1(n+i)=n(n+1)(n+2)(n+k2)(n+k1)=(n+k1)!(n1)!\displaystyle n^{\overline{k}} = \prod_{i=0}^{k-1} \left(n+i\right) = n\left(n+1\right)\left(n+2\right)\cdots\cdots\left(n+k-2\right)\left(n+k-1\right) = \frac{(n+k-1)!}{(n-1)!}
조합과 비슷하게 위 식은 중복 조합 ( ⁣ ⁣(nk) ⁣ ⁣)=(n+k1)!(n1)!k!\left(\!\!\dbinom nk \!\!\right) = \dfrac{(n+k-1)!}{(n-1)!\cdot k!}에서 등장하므로 nk=k!( ⁣ ⁣(nk) ⁣ ⁣)n^{\overline{k}} = k! \left(\!\!\dbinom nk \!\!\right)로도 나타낼 수 있다.

하강 계승의 정의에서 nnn-n을 대입하면 다음과 같이 식이 바뀌면서 상승 계승에 대한 식으로 변한다.
(n)k=i=0k1(ni)=(1)ki=0k1(n+i)=(1)knk\displaystyle \left(-n\right)^{\underline{k}} = \prod_{i=0}^{k-1}\left(-n-i\right) = \left(-1\right)^k \prod_{i=0}^{k-1} \left(n+i\right) = \left(-1\right)^k n^{\overline{k}}
nk=(1)k(n)kn^{\overline{k}} = \left(-1\right)^k\left(-n\right)^{\underline{k}}임을 알 수 있고, 반대로 nk=(1)k(n)kn^{\underline{k}} = \left(-1\right)^k\left(-n\right)^{\overline{k}}도 성립한다. 상술한 바와 같이 하강 계승은 조합의 정의에서, 상승 계승은 중복 조합의 정의에서 등장하므로 위와 같은 관계는 조합과 중복 조합이 사실상 하나의 식으로 표현될 수 있음을 의미한다. 즉, ( ⁣ ⁣(nk) ⁣ ⁣)=(1)k(nk)\left(\!\!\dbinom nk \!\!\right) = \left(-1\right)^k \dbinom{-n}k의 관계에 있다.

제1종 스털링 수, 제2종 스털링 수, 라흐 수를 정의할 때 쓰인다.

3. 정의역의 확장 [편집]

계승은 자연수에서만 정의되지만 Γ\Gamma로 표기하는 감마 함수를 이용하면 정의역을 복소수로 확장할 수 있다.[6] 자세한 내용은 감마 함수 문서 참조. 그러니까 감마 함수를 이용하면 1.5!1.5!같은 것도 계산할 수 있다는 것. 예를 들어 (12)!=Γ(12)=π\left(-\dfrac{1}{2}\right)!=\Gamma\left(\dfrac{1}{2}\right)=\sqrt\pi이다. 그래서 이를 통해 순열이나 조합 같은 것도 실수, 복소수로 일반화가 가능하다!

일반 공학용 계산기에 1.5!1.5!따위를 넣으면 못 구해주지만, 어째서인지 구글 계산기나 일부 계산기에선 잘 구해준다. n!=Γ(n+1)n! = \Gamma\left(n+1\right)를 이용해, 정수가 아닌 수를 넣으면 감마 함수로 구하도록 프로그래밍 되었을 것으로 추정된다.

4. 알고리즘 [편집]

계승 알고리즘은 컴퓨터에서 두 가지 형태로 구현할 수 있다.

unsigned int fact_iter (unsigned int n) { // 계승은 음이 아닌 정수에 대해서만 정의된다.

	if (n <= 1) return 1; // 1! = 0! = 1이므로 1을 반환한다.

	int result = n;
	for (int i = n - 1; i > 1; i--) result *= i; // n부터 하나씩 값을 줄여가며 그 값을 결과값에 곱한다.

	return result;
	
}

반복문(iteration, loop) 형태의 알고리즘

unsigned int fact_rcsv (unsigned int n) {

	if (n <= 1) return 1; // 1! = 0! = 1이므로 1을 반환한다.

	return n * fact_rcsv(n - 1); // n! = n * (n - 1)!이므로, n - 1에 대한 함수를 한 번 더 호출한다.
	
}

재귀(recursion) 형태의 알고리즘

두 알고리즘은 모두 시간복잡도가 O(n)O(n)이지만, 재귀 함수는 반복하여 호출할수록 메모리 공간을 더 차지하므로, 숫자가 커지면 반복문 알고리즘이 상대적으로 효율적이다.

5. 기타 [편집]

이것을 기반으로 한 공대개그가 존재한다. 예를 들어 3!3!를 '삼!'이라고 강하게 읽으면 일반인, '삼 팩토리얼'이라고 읽으면 공대생, 이라고 읽으면 이론언어학 전공자라는 식. 3이라고 읽으면 수학 귀신 애독자

오랫동안 수학자들을 괴롭힌 P-NP 문제의 단골 소재 중 하나다.


숫자 뒤가 아닌 숫자 앞에 느낌표를 붙이게 되면(!n!n의 꼴, nn은 자연수) nn개의 원소에 대한 완전순열(Derangement)의 수를 의미하게 되며, 이 때는 준계승(Subfactorial)이라 부르게 된다. 완전순열은 섞인 모자들 속에서 사람들이 아무도 자기 모자를 집어가지 않는 경우 등을 셀 때 쓰이며, !n!n의 공식은 n!n!보다 복잡하다. 자세한 내용은 완전순열 참고.

6. 관련 문서 [편집]


[1] 간혹 토리얼이라고도 하며, 너무 길다 싶으니 팩이라고도 한다. 하지만 역시 정식 표현은 아니다.[2] 후술하겠지만 11씩 빼서 11까지 차례로 곱한다는 뜻으로 외우는 것이 좋다.[3] 22씩 빼서 2211까지 차례로 곱하라는 기호.[4] kk씩 빼서 차례로 곱하라는 기호.[5] 1부터 1까지 차례대로 곱하는 것은 결국 곱하나 마나이기 때문이다.[6] 다만 이 경우에도 허수부가 00이라면 실수부는 00 이하의 정수가 될 수 없다.

라이선스를 별도로 명시하지 않은 문서는 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다.
기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다.

문서의 기여자는 역사 탭에서 확인할 수 있습니다.
접두어의 N: - 나무위키 사용자, R: - 리그베다 위키의 사용자를 뜻합니다.
자세한 사항은 나무위키에서 동일한 문서의 역사를 참고하시기 바랍니다.