모듈로 계산기
계산 결과
합동식
- 나머지
- 3
어떤 정수를 다른 정수로 나눈 모듈로란, 나눗셈 뒤에 남는 가장 작은 음수가 아닌 나머지이고, 이 페이지는 그것을 합동식으로 적습니다. -47 ≡ 3 (mod 5)처럼 씁니다. 나머지값은 두 입력의 부호가 어떻든 언제나 0 이상이고 모듈러스의 크기보다 작습니다. 이 규칙 하나가 음수에서 모듈로 연산이 성립하게 만듭니다. 프로그래밍 언어에 -47 % 5를 물으면 답이 언어마다 다릅니다. JavaScript와 C, Java, Go는 모두 -2를 돌려주고 Python은 3을 돌려줍니다. 그중 수학적인 나머지값은 하나뿐이고, 그것은 결코 음수로 나오지 않는 쪽입니다. 이 페이지는 -10억에서 10억 사이의 정수 두 개를 받아, 나머지값과 함께 나누어지는 수 · 나머지값 · 모듈러스를 묶는 등식을 인쇄합니다. 입력에 다른 조건은 없습니다. 나누어지는 수가 음수여도 되고, 모듈러스가 음수여도 되고, 나누어지는 수가 모듈러스보다 작아도 됩니다. 거부하는 값은 모듈러스가 0인 경우 하나뿐입니다. 어떤 수도 0으로 나눌 수 없으므로 mod 0은 내놓을 답이 없습니다.
네 가지 부호 조합과 각각이 만들어 내는 합동식
| 나누어지는 수 | 나누는 수 | 나머지값 | 합동식 |
|---|---|---|---|
| -47 | 5 | 3 | -47 ≡ 3 (mod 5) |
| -1 | 2 | 1 | -1 ≡ 1 (mod 2) |
| 47 | 5 | 2 | 47 ≡ 2 (mod 5) |
| 47 | -5 | 2 | 47 ≡ 2 (mod -5) |
첫 줄과 셋째 줄을 함께 읽어 보십시오. 한쪽은 피제수가 -47이고 다른 쪽은 47이며, 모듈러스는 둘 다 5이고 나머지값은 3과 2입니다. 그 한 쌍이 이 페이지의 요점입니다. 대부분의 계산기와 프로그래밍 언어가 쓰는 관례에서 첫 줄은 -2로 읽히는데, 그것이 3으로 읽히는 것이 나머지와 나머지값의 차이입니다. 이번에는 첫 줄과 둘째 줄을 읽어 보십시오. 피제수는 음수로 남고 모듈러스가 5에서 2로 반이 되는데, 나머지값은 3에서 1로 갑니다. 모듈러스를 반으로 줄인다고 나머지값이 반이 되는 것이 아니라, 같은 수를 더 짧은 주기 위에서 다시 재는 것입니다. 넷째 줄은 모듈러스가 -5인데 2를 내놓고, 모듈러스가 5인 셋째 줄과 정확히 같습니다. 부호에 둔감하다는 것이 이 한 번의 비교입니다. 네 줄 중 아무 줄이나 나머지값을 피제수에서 빼서 확인해 보십시오. 결과는 언제나 모듈러스의 정수배이고, 합동식이 주장하는 것이 바로 그것입니다.
공식
-47 ÷ 5 = -9 나머지 -2 (버림); -2 + 5 = 3, 따라서 -47 mod 5 = 3이고 -47 ≡ 3 (mod 5)
- a
- 나누어지는 수이며, 줄여지는 쪽입니다. 음수여도 되고 바로 그 경우를 시험해 볼 만합니다. a mod n은 a가 음수여도 음수가 아니어야 하므로, -47은 -2가 아니라 3에 내려앉아야 합니다. -1000000000에서 1000000000 사이의 정수를 받아들이고, 0도 얼마든지 쓸 만한 피제수이며 나머지값은 언제나 0입니다
- n
- 모듈러스이며 나누는 쪽입니다. 음수여도 되고, 그때도 나머지값은 달라지지 않습니다. 47 mod -5와 47 mod 5가 둘 다 2인데, n이 a - r을 나눈다는 말과 -n이 a - r을 나눈다는 말이 같은 말의 두 가지 표현이기 때문입니다. 거부하는 값은 0 하나뿐이고, 페이지는 n을 그 크기로 바꿔 쓰지 않고 입력한 그대로 인쇄합니다
- r
- 나머지값이며 답입니다. a에서 빼서 n의 배수를 남기는 가장 작은 음수가 아닌 수입니다. 두 조건이 그것을 완전히 못박습니다. r은 0 이상이고, r은 n의 크기보다 엄격히 작습니다. -47 mod 5가 3인 것은 -47 - 3 = -50이 5의 배수가 되는 가장 작은 음수가 아닌 값이 3이기 때문입니다
- ((a mod n) + |n|) mod |n|
- 이 페이지가 따르는 두 단계 요령이며, 두 번째 단계가 있는 이유이기도 합니다. 첫 단계는 대부분의 언어가 계산하는 것이고 음수를 돌려줄 수 있습니다. 두 번째 단계는 모듈러스의 크기를 더한 뒤 다시 줄여서, 어느 배수에서 재는지는 바꾸지 않고 결과를 음수가 아닌 구간으로 밀어 넣습니다. n 자체가 아니라 n의 크기를 쓰는 덕분에 음수 모듈러스도 그대로 통과합니다
- a ≡ r (mod n)
- 합동식이며 결과 패널의 첫 줄입니다. n이 a - r을 정확히 나눈다는 뜻이고, 나머지값을 단독으로 쓴 것과 같은 진술에 모듈러스와 피제수의 이름을 나란히 붙인 것입니다. 세 줄 기호와 mod 키워드는 낱말이 아니라 표기이므로 이 사이트의 어느 언어에서든 같은 모양으로 인쇄되며, 수에는 천 단위 구분 기호를 넣지 않습니다
- -47 ≡ 3 (mod 5)
- 기본 입력을 다 써 놓은 것입니다. 이 페이지를 나머지 계산기와 갈라 놓는 경우이고, 같은 두 수가 사칙연산 계산기가 쓰는 버림 관례에서는 -9 나머지 -2를 내고 여기서는 -47 ≡ 3 (mod 5)를 냅니다. -47 대신 47을 넣으면 3이 아니라 2가 나오므로, 마이너스 부호 하나가 답을 주위 한 바퀴만큼 옮깁니다
답이 멈추지 않고 한 바퀴 돌아야 할 때마다 이 페이지를 쓰면 됩니다. 시계 산술이 가장 오래된 예입니다. 10시에 5시간을 더하면 3시이고, 이는 15 mod 12입니다. 나머지값이 음수로 나오지 않는 것이 시계판을 읽을 수 있게 지켜 주는 성질입니다. 달력도 모양이 같습니다. 어떤 해의 100일째나 어떤 날짜의 요일은 7에 대한 나머지값입니다. 프로그래밍에서 모듈로 연산은 한 수가 다른 수를 나누는지 시험하는 방법이고(정확히 나누어떨어질 때 a mod n이 0입니다), 환형 버퍼나 해시 표에서 범위를 벗어난 색인을 되돌리는 방법이며, 반복 카운터를 정해진 범위 안에 붙잡아 두는 방법이고, 목록에서 차례로 항목을 고르는 방법입니다. 암호가 여기 위에 세워져 있습니다. RSA와 디피-헬만은 아주 큰 수의 모듈로 연산이고, 나머지값을 음수가 아니게 정의하는 이유가 바로 그것입니다. 부호가 붙는 답 위에는 모호하지 않은 산술을 세울 수 없습니다. 계좌번호에서 ISBN까지 검사 숫자도 9나 10, 11에 대한 나머지값입니다. 질문이 “내 계산기가 쓰는 관례에서 몇 번 들어가고 무엇이 남는가”라면 두 관례를 나란히 보여 주는 나머지 계산기가 더 나은 페이지이고, 두 수가 무엇을 공유하는지가 질문이라면 최대공약수 페이지가 그것에 바로 답합니다. 모듈로 계산기가 필요할 때 이 페이지는 음수 나머지를 돌려주지 않고 언제나 음수가 아닌 나머지값을 냅니다.
계산 예시
부호 함정: -47 mod 5
- 평소처럼 나누고 소수 부분을 버립니다. -47 ÷ 5 = -9.4이므로 버린 몫은 -9입니다
- -9 × 5 = -45이고 -47 - (-45) = -2이므로 버린 나머지는 -2입니다
- 나머지값은 0 이상이어야 하므로 모듈러스의 크기를 더합니다. -2 + 5 = 3
- 결과가 범위 안에 있는지 확인합니다. 0 ≤ 3 < 5이므로 더 손볼 것이 없습니다
- 합동식을 읽습니다. -47 ≡ 3 (mod 5)이고, 5가 -47 - 3 = -50을 정확히 나눈다는 뜻입니다
기본 입력이고, 이 페이지가 왜 있는지 설명해 주는 경우입니다. 사칙연산 계산기와 대부분의 프로그래밍 언어는 이 나눗셈에 -9 나머지 -2라고 보고합니다. 그 답이 틀린 것이 아니라, 다르게 적힌 질문에 답한 것입니다. 여기서 나머지값이 3인 것은 5의 배수를 남기는 가장 작은 음수가 아닌 값이 3이기 때문입니다. 47 mod 5는 3도 -3도 아니라 2라는 점을 보십시오. 피제수를 한 바퀴 옮기면 나머지값도 한 칸 옮겨 가고, 두 나머지값은 5만큼이 아니라 정확히 1만큼 다릅니다.
음수 모듈러스: 47 mod -5
- 47 ÷ 5 = 9.4이므로 5는 아홉 번 들어가고 9 × 5 = 45입니다
- 47 - 45 = 2이고, 이는 이미 0 ≤ 2 < 5 구간 안에 있습니다
- 모듈러스는 음수지만 나누어떨어짐은 부호를 가리지 않습니다. -5가 45를 정확히 나누므로 47 - 2도 정확히 나눕니다
- 합동식은 입력한 그대로의 모듈러스로 적습니다. 47 ≡ 2 (mod -5)
나머지값이 모듈러스의 부호에 둔감하다는 것을 보여 주는 경우입니다. -5를 5로 바꿔도 답은 달라지지 않습니다. -5가 어떤 수를 정확히 나누는 것과 5가 정확히 나누는 것은 같은 일이기 때문입니다. 페이지는 인쇄되는 합동식에서 마이너스 부호를 조용히 지우지 않고 그대로 남깁니다. -5를 5로 고쳐 쓰면 입력을 버린 것처럼 보이기 때문입니다. 아래 표에서 나누는 수가 -5인 두 줄과 5인 두 줄을 견주어 보십시오. 나머지값을 움직이는 것은 언제나 피제수의 부호뿐입니다.
보통의 경우: 1234 mod 12
- 12 × 100 = 1200이고 1234 - 1200 = 34이므로 이어 갑니다. 12 × 2 = 24이고 34 - 24 = 10입니다
- 12 × 3 = 36은 34를 넘어서므로 몫은 102이고 남은 것은 10입니다
- 10은 0 이상이고 12보다 작으므로 이미 나머지값입니다
- 합동식으로 읽으면 1234 ≡ 10 (mod 12)입니다
양수 두 개짜리 평범한 경우이고, 나머지값이 보통의 나머지와 일치하는 자리입니다. 이것이 이 예를 넣은 이유입니다. 두 수가 모두 양수일 때는 맞춰 줄 것이 없고, 페이지는 여느 나머지 도구와 같은 일을 합니다. 흥미로운 줄은 마이너스 부호가 들어 있는 쪽입니다. 이 짝에는 눈여겨볼 두 번째 읽기가 있습니다. 1234 mod 12는 시계판에 열두 시간이 있을 때 어떤 시간이 어디에 떨어지는지 묻는 것과 같고, 10은 지극히 그럴듯한 시각이지만 -2였다면 그렇지 않았을 것입니다.
한계
모듈러스는 0일 수 없습니다. 0으로 나누는 것은 답이 없으므로 보고할 나머지도, 그것도 가장 작은 음수가 아닌 나머지도 없습니다. 이 페이지는 결과처럼 보이는 자리표시자를 돌려주는 대신 입력을 거부합니다. 두 수 모두 정수여야 합니다. 분수 모듈러스는 수학의 일부 갈래에서 나름의 정의를 갖지만 이 페이지가 구현한 것은 그것이 아니므로, 47.5는 조용히 48로 반올림해 그렇게 물은 것처럼 답하는 대신 거부됩니다. 각 수의 크기는 10억으로 제한되는데, 이는 모든 중간 단계를 배정도 수가 정수를 정확히 표현하는 범위 안에 붙잡아 두기 위해서입니다. 그 위로는 산술이 반올림되기 시작하고 답이 지극히 평범해 보이면서도 틀리게 됩니다. 이 페이지는 나머지값과 합동식만 보고합니다. 몫을 주지 않고, 여러분의 피제수와 합동인 다른 수들을 나열하지도 않으며, 한 번에 한 쌍 이상의 모듈로 연산을 하지도 않습니다. 음수 모듈러스는 받아들이고 입력한 대로 인쇄하므로, 같은 말을 하는 두 합동식이 페이지에서 달라 보일 수 있습니다. 47 ≡ 2 (mod -5)와 47 ≡ 2 (mod 5)는 같은 진술입니다. 마지막으로 아래 참고표는 네 쌍이 고정되어 있고 입력을 따라가지 않습니다. 적어 넣은 값에 답하는 것은 결과 패널 쪽입니다.
자주 묻는 질문
- -47 mod 5는 왜 -2가 아니라 3인가요?
- 나머지값이 피제수에서 빼서 모듈러스의 배수를 남기는 가장 작은 음수가 아닌 수로 정의되기 때문입니다. -47 - (-2) = -45도 -47 - 3 = -50도 5의 배수라는 점에서는 -2와 3이 모두 자격이 있으므로, 산술만으로는 둘 중 하나를 고르지 못합니다. 정의가 고릅니다. 나머지값은 0부터 모듈러스 직전까지의 구간에 살고, -2는 그 밖에 있습니다. 나머지는 여기서 따라 나옵니다. 프로그래밍 언어에서 무엇이 나오는지는 그 언어가 어느 관례를 골랐는지에 달렸고, JavaScript와 C, Java, Go는 다른 쪽을 골라 부호가 피제수를 따르게 했습니다. Python은 이쪽을 골랐습니다. 어느 언어도 고장 나지 않았고, 다르게 적힌 질문에 답하고 있을 뿐입니다.
- 모듈러스가 음수여도 되나요?
- 됩니다. 나머지값은 그 부호에 영향을 받지 않습니다. 음수 모듈러스가 통하는 것은 나누어떨어짐이 부호를 무시하기 때문입니다. -5가 어떤 수를 정확히 나누는 것과 5가 정확히 나누는 것은 같은 일이므로 -5의 배수 집합은 5의 배수 집합과 같고, 그 집합에서 가장 작은 음수가 아닌 수도 양쪽이 같습니다. 이 페이지는 -5를 5로 바꿔 쓰지 않고 입력한 그대로 인쇄합니다. 입력을 고쳐 쓰면 부호를 버린 것처럼 보이기 때문입니다. 그래서 47 mod -5는 2이고 47 mod 5도 2이며, 인쇄된 두 합동식은 한쪽에 마이너스 부호가 보인다는 점만 다릅니다.
- 모듈러스에 0을 넣으면 어떻게 되나요?
- 거부합니다. mod 0은 보고할 값이 없습니다. 0은 0만 나누므로 피제수를 견줄 0의 정수배가 없고, 취할 나머지도 없습니다. 0이나 피제수 자신을 돌려주면 답처럼 보이겠지만 모든 입력에 대해 틀릴 것입니다. 입력을 거부하는 것이 정직한 결과입니다. 0으로 나누는 일이 산술의 다른 곳에서 정의되지 않는 것도 같은 이유입니다.
- 이 사이트의 나머지 계산기와 같은 건가요?
- 아니요, 그리고 두 페이지가 같은 계산에 다른 답을 내는 것이 차이를 가장 또렷하게 보는 방법입니다. 나머지 계산기는 두 관례를 나란히 늘어놓고 고르게 합니다. 세로셈 나눗셈에는 실제로 두 관례가 돌아다니고, 교실은 어느 쪽이든 가르칠 수 있기 때문입니다. 이 페이지는 선택지를 주지 않습니다. 모듈로에는 다른 읽기가 하나뿐이고, 답이 음수가 되지 않기 때문입니다. -47을 5로 나눌 때 나머지 계산기는 기본 관례에서 -9 나머지 -2를 보여 주고, 이 페이지는 합동식 -47 ≡ 3 (mod 5)를 보여 줍니다. 특정한 두 수에서 두 관례가 어떻게 갈리는지 보려면 그쪽을 쓰고, 나머지값 자체가 필요하면 이쪽을 쓰십시오.
- 나머지값은 실제로 어디에 쓰나요?
- 어떤 수가 계속 커지지 않고 한 바퀴 돌아야 하는 모든 곳입니다. 시계판이 일상적인 예입니다. 문자판에 열두 시간이 있으므로 10시에 5시간을 더한 시각은 15 mod 12, 곧 3시입니다. 요일도 7에 대한 나머지값으로 같은 방식입니다. 프로그래밍에서 모듈로는 나누어떨어짐을 시험합니다. n이 정확히 들어갈 때 a mod n이 0이기 때문입니다. 환형 버퍼나 해시 표에서 끝을 넘어간 색인을 처음으로 되돌리고, 반복 카운터를 정해진 범위 안에 붙잡아 둡니다. 공개키 암호는 아주 큰 수의 모듈로 연산이고, 그래서 음수가 아닌 관례가 중요합니다. 부호 있는 결과를 내는 산술 위에는 모호하지 않은 것을 세울 수 없습니다.
- 왜 합동식만 보여 주고 몫은 보여 주지 않나요?
- 몫은 나머지값이 하는 말의 일부가 아니기 때문입니다. 합동식은 피제수와 나머지값과 모듈러스의 이름을 대고, 모듈러스가 앞의 둘의 차를 나눈다고 주장합니다. 그 진술은 몫 없이도 완결됩니다. 몫은 모듈러스가 통째로 몇 번 들어가는지 물어서 나오는 수이고, 그 질문은 세로셈 나눗셈의 몫입니다. 몫까지 함께 보고 싶다면 나머지 계산기와 세로셈 나눗셈 계산기가 둘 다 그것을 보고합니다. 나머지값만 따로도 결과 패널의 둘째 줄에 인쇄되므로, 숫자만 원하는 독자가 문장에서 읽어 낼 필요는 없습니다.
참고 문헌
- Modular Arithmetic — 나머지의 산술, 그리고 나머지값을 0에서 모듈러스까지의 구간에서 취한다는 관례 — Wolfram MathWorld (United States)
- Congruence — a ≡ r (mod n) 표기법, 그리고 어떤 수가 다른 두 수의 차를 정확히 나눈다는 것의 뜻 — Wolfram MathWorld (United States)
- Remainder (%) — 부호가 피제수를 따르는 JavaScript 연산자이며, -47 % 5가 -2를 돌려주는 동작이고 여기서 두 번째 단계가 필요한 이유입니다 — MDN Web Docs (Mozilla)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知 — 첨부 목록 제5항이 《义务教育数学课程标准(2022年版)》이고, 나머지가 있는 나눗셈과 합동은 초등학교 고학년에서 중학교까지의 수와 대수 영역 내용이므로 학년군 요구는 그 첨부 원문을 기준으로 합니다 — 中华人民共和国教育部