모듈러 연산 계산기 (Mod 계산기)

기본 mod, 모듈러 덧셈/뺄셈/곱셈, 모듈러 거듭제곱(빠른 거듭제곱・반복 제곱법), 모듈러 역원(확장 유클리드 호제법)의 4가지 모드를 지원하는 모듈러 연산 계산기입니다. BigInt를 사용해 음수의 mod와 매우 큰 지수의 거듭제곱도 정확하게 계산합니다.

모듈러 연산의 기본 성질

성질 설명
(a + b) mod n = ((a mod n) + (b mod n)) mod n 덧셈은 mod를 취한 후에 더하든, 더한 후에 mod를 취하든 결과가 같습니다.
(a − b) mod n = ((a mod n) − (b mod n) + n) mod n 뺄셈은 결과가 음수가 될 수 있으므로, 마지막에 n을 더한 뒤 다시 mod n을 취해 [0, n) 범위로 맞춥니다.
(a × b) mod n = ((a mod n) × (b mod n)) mod n 곱셈도 덧셈과 마찬가지로 도중에 mod를 취해도 최종 결과는 바뀌지 않습니다. 이 성질이 거듭제곱을 빠르게 계산하는 반복 제곱법의 토대가 됩니다.
a와 n이 서로소 ⇔ a의 n을 법으로 하는 역원이 존재한다 확장 유클리드 호제법으로 gcd(a, n) = 1이 되는 경우에 한해, a × x ≡ 1 (mod n)을 만족하는 x(역원)가 존재합니다.

합동식・모듈러 연산(mod 계산)이란

모듈러 연산이란 어떤 정수를 법(modulus)이라 부르는 양의 정수로 나눈 나머지에만 주목하는 연산 방식입니다. 두 정수 a와 b를 같은 법 n으로 나누었을 때 나머지가 서로 같으면 "a와 n을 법으로 하여 b와 합동이다"라고 하며, a ≡ b (mod n)이라고 표기합니다. 이 도구는 "기본 mod", "덧셈・뺄셈・곱셈", "거듭제곱", "역원"의 4가지 모드로 합동식과 관련된 대표적인 계산을 한곳에서 처리할 수 있습니다.

내부 계산은 모두 자바스크립트의 네이티브 BigInt로 수행하므로, 지수가 수백 자리에 이르는 거듭제곱이나 자릿수가 매우 큰 정수끼리의 덧셈・뺄셈・곱셈에서도 반올림 오차 없이 정확한 값을 얻을 수 있습니다. 음수를 입력한 경우에도 수학적인 합동식의 정의(결과는 항상 0 이상 법 미만의 범위에 들어감)에 따라 정규화하므로, 프로그래밍 언어마다 다른 나머지 연산자의 동작 차이에 흔들리지 않고 일관된 결과를 확인할 수 있습니다.

합동식・모듈러 연산 계산기 사용법

  1. 모드를 선택합니다 "기본 mod", "덧셈・뺄셈・곱셈", "거듭제곱", "역원" 중에서 원하는 계산 종류를 선택합니다.
  2. 정수를 입력합니다 선택한 모드에 맞추어 a・b・법 n(또는 밑과 지수)을 입력합니다. 음의 정수도 그대로 입력할 수 있습니다.
  3. 연산자를 선택합니다(덧셈・뺄셈・곱셈 모드만 해당) 드롭다운에서 덧셈・뺄셈・곱셈 중 하나를 선택합니다.
  4. 결과를 확인합니다 입력할 때마다 자동으로 다시 계산되어 수식과 결과가 표시됩니다. 역원이 존재하지 않는 경우에는 안내 메시지로 전환됩니다.
  5. 입력을 초기화합니다 "지우기" 버튼을 누르면 모든 모드의 입력란이 한 번에 비워집니다.

더 잘 활용하기 위한 팁

  • 음수의 mod는 프로그래밍 언어마다 결과가 다릅니다. 이 도구는 수학적 정의(결과는 항상 0 이상 n 미만)를 따르므로 -7 mod 3은 -1이 아니라 2가 됩니다.
  • 거듭제곱 모드는 "반복 제곱법"으로 계산하므로 지수가 수백 자리에 이르러도 즉시 결과를 구합니다. RSA 암호의 암호화・복호화 처리에도 같은 알고리즘이 사용됩니다.
  • 시계의 시각은 우리에게 친숙한 모듈러 연산의 예입니다. "15시"를 12시간제로 바꾸면 15 mod 12 = 3시가 됩니다.
  • 역원 모드는 법 n이 소수가 아니어도 a와 n이 서로소(최대공약수가 1)이기만 하면 계산할 수 있습니다.
  • 경쟁적 프로그래밍에서는 거대한 답을 그대로 출력하는 대신 1,000,000,007과 같은 큰 소수로 나눈 나머지를 답으로 요구하는 문제가 자주 출제됩니다. 이 도구의 거듭제곱 모드는 그런 계산을 검산하는 데도 활용할 수 있습니다.

합동식・모듈러 연산이 활용되는 분야

공개키 암호 알고리즘 학습

RSA 암호의 암호화・복호화는 거대한 수의 거듭제곱을 법으로 나눈 나머지를 구하는 과정 그 자체입니다. 거듭제곱 모드에서 지수와 법을 크게 설정해 반복 제곱법의 계산 속도를 직접 체감할 수 있습니다.

해시 함수 설계 원리 확인

많은 해시 함수는 내부적으로 나머지 연산을 이용해 값을 정해진 범위 안으로 접어 넣습니다. 덧셈・뺄셈・곱셈 모드에서 계산 도중 나머지가 어떻게 바뀌는지 따라가 볼 수 있습니다.

체크 디지트(검사 숫자) 원리 조사

ISBN, 신용카드 번호, 은행 계좌번호 등의 검사 숫자는 각 자릿수에 가중치를 곱한 합을 법으로 나눈 나머지로부터 산출됩니다. 기본 mod 모드로 손계산 검산에 활용할 수 있습니다.

요일・달력의 주기 계산

"n일 후는 무슨 요일인가", "윤년은 몇 년 주기로 오는가"와 같이 주기성을 가진 문제는 7이나 4를 법으로 하는 합동식으로 표현할 수 있습니다.

알고리즘 문제 풀이(경쟁적 프로그래밍) 검산

"답을 1,000,000,007로 나눈 나머지를 구하라"는 형태로 자주 출제되는 문제에서, 자신이 작성한 코드의 결과가 맞는지 거듭제곱 모드・덧셈・뺄셈・곱셈 모드로 대조해 볼 수 있습니다.

합동식・모듈러 연산 용어집

합동식
a ≡ b (mod n) 형태의 식으로, "a와 b를 n으로 나눈 나머지가 서로 같다"는 관계를 나타냅니다. "="가 아니라 "≡"를 쓰는 이유는 같은 것이 값 자체가 아니라 나머지이기 때문입니다.
법(modulus)
나누는 수를 가리킵니다. 이 도구에서는 1 이상의 정수를 지정합니다. 법이 달라지면 같은 수라도 합동 관계가 달라집니다.
나머지 연산
어떤 수를 법으로 나눈 나머지를 실제로 구하는 연산입니다. 수학적 정의에서는 결과가 항상 0 이상, 법 미만의 범위에 들어갑니다.
모듈러 역원
a × x ≡ 1 (mod n)을 만족하는 정수 x를 가리킵니다. 합동식의 세계에서 "a로 나누는" 연산 대신 "a의 역원을 곱하는" 방법으로 같은 효과를 얻을 수 있습니다.
서로소
두 정수의 최대공약수가 1인 관계를 가리킵니다. a와 n이 서로소일 때에 한해 a의 n을 법으로 하는 역원이 존재합니다.
확장 유클리드 호제법
최대공약수를 구하는 과정과 동시에 a × x + n × y = gcd(a, n)을 만족하는 정수 쌍 (x, y)를 구하는 알고리즘입니다. 역원 모드의 계산에 사용됩니다.
반복 제곱법(고속 거듭제곱)
지수를 이진수로 전개하고 밑을 반복해서 제곱하면서 해당 자릿수만 결과에 곱해 넣는 방식으로, 지수의 자릿수에 비례하는 횟수의 곱셈만으로 거듭제곱을 구하는 알고리즘입니다. 거듭제곱 모드에 사용됩니다.
모듈러 거듭제곱
밑의 거듭제곱을 법으로 나눈 나머지를 구하는 계산입니다. RSA 암호의 암호화・복호화 처리에서 핵심이 되는 연산이며, 이 도구의 "거듭제곱" 모드에 해당합니다.

자주 묻는 질문

수학적인 합동식의 정의에서 mod의 결과는 항상 0 이상, 법(n) 미만의 범위에 들어갑니다. 그래서 -7 mod 3은 자바스크립트의 `%` 연산자가 그대로 반환하는 -1이 아니라 2가 됩니다(-7 = -3×3 + 2). 이 도구는 이 수학적 정의에 따라 계산합니다.

모듈러 역원은 합동식의 세계에서 "나눗셈"에 해당하는 연산을 하고 싶을 때 사용합니다. 합동식에는 일반적인 나눗셈이 정의되어 있지 않으므로, a로 나누는 대신 a의 역원을 곱해 같은 효과를 얻습니다. RSA 암호의 키 생성(개인키 계산)이나, 경쟁적 프로그래밍에서 "답을 큰 소수로 나눈 나머지로 구하라"는 문제에서 분수를 다룰 때 자주 사용됩니다.

이 도구는 "반복 제곱법"이라는 알고리즘을 사용하므로, 지수가 수백 자리에 이르는 거대한 수여도 지수의 자릿수(정확히는 이진수 자릿수)에 비례하는 횟수의 곱셈만으로 계산이 끝납니다. 거듭제곱을 모두 계산한 뒤 mod를 취하는 방식과 달리 즉시 결과를 구할 수 있습니다.

a의 n을 법으로 하는 역원이 존재하는 것은 a와 n의 최대공약수(gcd)가 1일 때(서로소일 때)뿐입니다. 예를 들어 a=4, n=8인 경우 gcd(4, 8)=4로 1이 아니므로, 4 × x ≡ 1 (mod 8)을 만족하는 정수 x는 존재하지 않습니다. n이 소수라면 a가 n의 배수가 아닌 한 반드시 역원이 존재합니다.

실용적으로는 거의 같은 의미로 쓰이지만, 엄밀히 말하면 "합동식"은 a ≡ b (mod n)처럼 두 수가 같은 나머지를 갖는 관계를 나타내는 수학적 개념이고, "나머지 연산(mod 연산)"은 a를 n으로 나눈 나머지를 실제로 계산하는 조작을 가리킵니다. 이 도구는 나머지 계산 자체를 다룹니다.
툴군

여담 ― "시계 산술"이 떠받치는 현대 암호

모듈러 연산(합동식)은 흔히 "시계 산술(clock arithmetic)"이라고 불립니다. 12시간제 시계에서 13시는 1시와 "같은" 것으로 취급되는데, 이는 정확히 13 ≡ 1 (mod 12)라는 합동식 그 자체이며, 어떤 수를 법(이 경우 12)으로 나눈 나머지에만 주목하는 사고방식입니다. 독일의 수학자 카를 프리드리히 가우스가 1801년 저서 『정수론 연구(Disquisitiones Arithmeticae)』에서 합동식 기호 "≡"를 체계화하면서, 이 개념은 현대 수학의 표준 도구가 되었습니다.

언뜻 소박해 보이는 이 연산은 현대 인터넷 보안의 근간을 떠받치고 있습니다. RSA를 비롯한 공개키 암호 방식에서는 거대한 수의 거듭제곱을 법으로 나눈 나머지를 구하는 "모듈러 지수 연산"이 암호화・복호화의 핵심 처리입니다. 지수와 법이 수백 자리에 이르기 때문에 거듭제곱을 그대로 계산한 뒤 나머지를 구하면 계산량이 폭발적으로 늘어나지만, 반복 제곱법을 사용하면 지수의 자릿수에 비례하는 횟수의 곱셈만으로 끝나 실용적인 속도로 처리할 수 있습니다.

확장 유클리드 호제법을 이용한 모듈러 역원 계산 역시 암호 이론뿐 아니라 부호 이론, 해시 함수 설계 등 컴퓨터 과학의 폭넓은 분야에서 쓰이는 기초 기술입니다. "2000년도 더 된 고대의 산술"과 "최신 보안 기술"이 같은 수학적 토대 위에 성립한다는 사실은 정수론의 보편성을 상징적으로 보여줍니다.