최근 수정 시각 : 2024-10-19 16:06:29

나머지

그외에서 넘어옴
1. 일반 명사2. 수학에서의 나눗셈의 나머지
2.1. 정수의 나눗셈의 나머지2.2. 다항식의 나눗셈의 나머지2.3. 컴퓨터 프로그램에서의 정수 나눗셈 명령어
2.3.1. Microsoft Excel에서
2.4. 구현
3. 관련 문서

1. 일반 명사

  1. 어떤 한도에 차고 남은 부분.(분류의 경우, 그외 또는 이외라고 할 때가 있다.)
  2. 어떤 일을 하다가 마치지 못한 부분.
  3. 어떤 일의 결과.

어원은 '남-'[1] + '-아지'[2] 로 추정된다.

기타(其他)라고 말할 때도 있다.

2. 수학에서의 나눗셈의 나머지

2.1. 정수의 나눗셈의 나머지

remainder

나눗셈에서는 피제수(, 나누어지는 수)를 제수(除數, 나누는 수)로 나눴을 경우, 나누어 떨어지지 않고 남은 수[3]를 말한다. 잉여(剩餘)라고도 하며, 7을 2로 나누면 이 3이고 나머지는 1이다. A를 B로 나눈 몫이 C이고 나머지가 R이면 A=BC+R라는 식이 성립하며, 이 식으로 나눗셈을 검산할 수 있다. 예를 들어 앞의 나눗셈에서는 7=2×3+1이다.

수학적으로 엄밀한 나머지의 정의는 다음과 같다. 나눗셈 정리에 따르면 양의 정수 제수 [math(b)]와 임의의 정수 피제수 [math(a)]에 대해, [math(a =bq+r)]을 만족시키는 유일한 정수 [math(q)]와 [math(0 \le r < b)]가 존재한다. 이 때 [math(r)]를 나머지라고 한다. 즉 요약하면 제수는 양의 정수, 피제수는 상관없음(음수 포함), 나머지는 0~(제수-1)이 수학에서 정하는 '정석'인 것이다.

다만 이 정의는 대학 수학인 정수론까지 가야 등장하므로, 중등 교과과정에서는 음수가 포함된 나눗셈을 정확하게 정의하지는 못하고 어쩔 수 없이 얼버무리고 넘어가게 된다.

물론 수학에서건 일상생활에서건 이 '정석'에 얽매일 필요는 없다. 직관적으로 음수를 나눌 경우 나머지를 음수로, 즉 나머지 범위를 [math( -b<r \le 0)]로 생각하는 경우도 있지만, 이 경우는 양수의 나머지 집합과 음수의 나머지 집합이 달라진다는 단점이 있다. 나머지의 범위를 [math( -(b-1)/2 \le r \le b/2 )]로 잡아 정의하는 경우도 있고, 이 경우 몫은 'a/b에 가장 가까운 정수'의 의미가 된다. 정수론이나 대수학을 파다 보면 '나머지가 무엇인지'보다는 '나머지가 같냐 다르냐'가 본질적인 문제라는 것을 느끼게 될 것이다. 특히 정수에서 나머지만을 떼어내어 보는 합동식정수론의 핵심적인 주제 중 하나이다.

다만 현실에서, 특히 컴퓨터 명령어에서 어떻게 나머지를 정의할지는 필요한 용도에 따라서 갈릴 것이다.

제수 혹은 법(modulo)이 고정되어 있으면, 다항식 수열, 거듭제곱꼴, 일반적으로 피보나치 수열 등을 포함한 정수계수 선형점화식의 항 ([math( a_{n+k} = c_1 a_{n+k-1} + \cdots + c_k a_n)] 꼴) 들은 나머지의 주기성을 갖는다.[4] 즉 [math(a_n)]을 나눈 주기가 일정 패턴으로 반복되는 것.
다항식과 거듭제곱꼴의 나머지 주기는 오일러 정리, 원시근중국인의 나머지 정리 등의 합동식에 대한 온갖 지식들을 적절히 활용하면 일반적인 식을 구할 수 있다. 피보나치 수열 등등의 경우도 조금은 어렵지만 대수적 정수론 등의 지식을 활용하면 비슷한 방법으로 나머지 주기가 얼마인지를 계산하는 것이 가능하다.

초등 수학에서 나머지에 대한 성질은 제곱수의 끝자리가 0, 1, 4, 9, 6, 5, 6, 9, 4, 1 등으로 반복되는 등등의 관찰이나, 10진법에서의 배수 판별법 등에서 관찰을 해 보았을 것이다. 다만 배수 판별법 중에는 나머지를 정확히 결정하지 않는 것들이 더 많다.

2.2. 다항식의 나눗셈의 나머지

다항식의 나눗셈에서도 나머지를 정의할 수 있다. 다항식 [math(A(x))]와 [math(B(x) \neq 0)]에 대해, [math(A(x) = B(x) Q(x)+R(x))]을 만족하며 [math(\deg(R)<\deg(B))]인 다항식 [math(Q(x),R(x))]가 유일하게 존재한다. 이 때 [math(R(x))]를 나머지라 정의한다.

예를 들어 [math(x^3 + 2x+1)]을 [math(x^2)]로 나누면 [math(x^3+2x+1=x^2\cdot x + (2x+1))] 이므로, 몫은 [math(x)] 나머지는 [math(2x+1)]이다. 나머지 정리에 따르면 [math(F(x))]를 [math((x-\alpha))]로 나누었을 때 나머지가 [math(F(\alpha))]임을 얻는다.

다항식의 나눗셈에 대해 역시 정석대로 따진다면 주의할 점이 있다. 다항식의 몫과 나머지의 계수를 모두 유리수/실수/복소수로 간주(즉 위에서 생각)하면 나눗셈이 가능하지만, 정수계수만을 고집할 경우 나눗셈이 성립하지 않는 경우가 많다. 예로 [math(x^2 + 1)]을 [math(2x+1)]로 나누는 것은 정수계수 위에서는 불가능하다. 단 [math(B(x))]의 최고차항이 1 또는 -1이면 (monic이라 한다) 정수계수로도 나눗셈이 가능하다.

변수가 2개 이상인 다항식에서는 몫과 나머지를 생각할 수 없다.

추상대수학에서는 정수와 다항식에서 나머지가 있는 나눗셈이 가능하다는 개념을 확장시킨 유클리드 정역(Euclid domain)을 생각하여, 보다 넓은 범위의 나머지를 생각하기도 한다.
조립제법을 이용하면 쉽게 계산할 수 있다.

2.3. 컴퓨터 프로그램에서의 정수 나눗셈 명령어

음수에 대한 규칙 처리에서 프로그램에 따라, 명령어에 따라 차이를 보인다.
* 음수의 나머지를 음수로 놓기 (예시: -10을 3으로 나누면 몫은 -3, 나머지는 -1)
* 음수의 나머지를 양수로 놓기 (예시: -10을 3으로 나누면 몫은 -4, 나머지는 2)
C언어 등 많은 프로그래밍 언어에서는 %를 나머지 연산자로 사용한다. 예를 들어 20 % 3 = 2이다. 참고로 C 언어의 / 와 % 연산자는 음수에 대한 정확한 규정은 없으나, 컴파일러 대개는 첫 번째 방식으로 동작한다.
한셀은 Excel 과 마찬가지로 나눗셈의 나머지를 구하는 함수는 MOD이다. =MOD(A, B)를 입력하면 A를 B로 나눈 나머지를 알려 준다.
대개의 수학 소프트웨어(MATLAB, Maple, Mathematica 등등)에는 다양한 나머지 연산이 다 들어가 있다.

2.3.1. Microsoft Excel에서

  • A / B 를 하면 실수의 나눗셈 연산을 한다. "= -10 / 3" 의 결과는 -3.3333... 이다.
  • QUOTIENT(A, B)를 하면 정수형 나눗셈을 하는데 첫번째 방식으로 몫을 계산한다. "= QUOTIENT(-10, 3)" 의 결과는 -3 이다. 그리고, TRUNC(A/B) 를 하면 QUOTIENT 함수와 동일한 결과가 나온다.
  • 첫번째 방식으로 나머지를 계산하는 함수는 별도로 제공하지 않지만, A - B * QUOTIENT(A, B) 라는 식으로 계산할 수 있다. 즉 "= (-10) - (3) * QUOTIENT(-10 , 3)" 의 결과는 -1 이다. TRUNC 함수는 QUOTIENT 와 동일한 결과가 나오므로 이를 써도 된다.
  • INT(A/B) 를 하면 두번째 방식으로 몫을 계산한다. 즉, "= INT(-10/3)" 의 결과는 -4 이다.
  • MOD(A, B) 를 하면 두번째 방식으로 나머지를 계산한다. 즉, "= MOD(-10, 3)" 의 결과는 2 이다.

엑셀에서 제공하는 정수형 나눗셈 연산자(QUOTIENT)와 나머지 연산자(MOD)가 계산방식이 다르기 때문에, 음수를 취급할 때는 신경써서 사용해야 한다.

2.4. 구현

  • 음수의 나머지를 양수로 놓기

[math(\bmod\left( a,\, b \right) := a - b \left\lfloor \dfrac ab \right\rfloor)]

삼각함수를 이용하여 구현할 때
[math(\bmod\left( a,\, b \right) := \dfrac b\pi \cot^{-1}\left( \cot \dfrac ab \pi \right))]

  • 음수의 나머지를 음수로 놓기

[math(\bmod\left( a,\, b \right) := a - b \times \mathrm{trunc}\left( \dfrac ab \right))]

삼각함수를 이용하여 구현할 때
[math(\bmod\left( a,\, b \right) := a - b \times \mathrm{sgn}\left( \dfrac ab \right) \left\lfloor\left\lvert \dfrac ab \right\rvert\right\rfloor)]

이 때, [math(\lfloor x \rfloor = x - \bmod\left( x, 1 \right))] 이므로
[math(
\begin{aligned}
\bmod\left( a,\, b \right) :\!&= a - b \times \mathrm{sgn}\left( \dfrac ab \right) \left( \left\lvert \dfrac ab \right\rvert - \bmod\left( \left\lvert \dfrac ab \right\rvert,\, 1 \right) \right) \\
&= \mathrm{sgn}\left( \dfrac ab \right) \bmod\left( \left\lvert \dfrac ab \right\rvert,\, 1 \right) \\
&= \dfrac 1\pi ~ \mathrm{sgn}\left( \dfrac ab \right) \cot^{-1}\left( \cot \left\lvert \dfrac ab \right\rvert \pi \right)
\end{aligned}
)]


여기서 [math(\mathrm{trunc}\left( x \right))] 는 정수 부분 함수, [math(\left\lfloor x \right\rfloor)] 는 최대 정수 함수, [math(\operatorname{sgn})]은 부호 함수이며 정수 부분 함수는 다음과 같이 정의된다.

[math(
\mathrm{trunc}\left( x \right) = \mathrm{ip}\left( x \right) := \mathrm{sgn}\left( x \right) \lfloor\lvert x \rvert\rfloor =
\begin{cases}
\lfloor x \rfloor & \text{ if } x \ge 0 \\
\lceil x \rceil & \text{ if } x < 0
\end{cases}
)]

3. 관련 문서



[1] 남다[2] '작은 것'이란 뜻을 더해주는 접미사. 어린 동물들의 이름(강아지, 송아지, 망아지 등)의 '아지'도 바로 이것.[3] 나머지의 차수는 제수의 차수를 넘을 수 없으며, 나머지는 제수보다 항상 작다.[4] 다항식 수열과 거듭제곱꼴은 둘다 선형점화식을 만족시킨다. 다항식의 경우 계차수열, 거듭제곱꼴의 경우 등비수열.