0Pricing
Coding Interview Prep · 강의

페르마를 이용한 모듈러 역원

법 아래에서 안전하게 나눕니다

페르마를 이용한 모듈러 역원은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

모듈러에서는 나눗셈이 깨집니다

덧셈, 뺄셈, 곱셈은 모듈러 아래에서 잘 작동하지만 일반적인 나눗셈은 그렇지 않습니다. 단순히 나눈 다음 나머지를 구할 수는 없습니다. ⚠️

나눗셈을 곱셈으로 바꾸기

해결 방법은 모듈러 역원입니다. x로 나누는 것을 x의 역원을 곱하는 것으로 바꿀 수 있습니다. 따라서 a / b를 m으로 모듈러 연산한 값은 a에 b의 역원을 곱한 값으로 바뀝니다.

역원이란 무엇인가요

x의 역원은 모듈러 아래에서 x와 곱했을 때 1이 되는 수입니다. 일반적인 산술에서 1/x가 하는 역할을 대신합니다.

# x * inv(x) % m == 1

소수가 가능하게 합니다

x와 m이 공약수를 갖지 않을 때에만 역원이 존재합니다. 1e9+7 같은 소수 모듈러를 사용하면 0이 아닌 모든 x에 역원이 존재합니다.

페르마의 소정리

페르마의 소정리에 따르면 소수 p에 대해 x가 p의 배수가 아니면 x의 p-1제곱은 1과 합동입니다.

# x^(p-1) % p == 1

역원 유도하기

x의 인수 하나를 분리하면 나머지는 x의 역원이 되어야 합니다. 따라서 x의 역원은 x를 p-2제곱한 뒤 p로 모듈러 연산한 값입니다.

# inv(x) = x^(p-2) % p

빠른 거듭제곱으로 계산하기

그 지수는 매우 크므로 이전 수업에서 배운 빠른 거듭제곱을 사용하세요. 파이썬에서는 pow를 한 번 호출하면 전체 계산이 끝납니다.

inv = pow(x, MOD - 2, MOD)

나눗셈에 사용하기

모듈러 아래에서 a를 b로 나누려면 a에 b의 역원을 곱하세요. 그 나머지가 바로 실제 몫을 p로 모듈러 연산한 값입니다.

ans = a * pow(b, MOD - 2, MOD) % MOD

절대 0의 역원을 구하지 마세요

어떤 수에 0을 곱해도 1이 될 수 없으므로 0의 역원은 존재하지 않습니다. 모듈러 연산 후 0이 되는 값으로 나누지 않도록 확인하세요.

역원 하나를 구하는 비용

페르마의 역원 하나를 구하는 일은 빠른 거듭제곱 한 번이므로 O(log p) 시간이 걸립니다. 몇 번의 나눗셈에는 저렴하지만 수백만 번 수행하면 비용이 누적됩니다.

여러 역원을 구하는 방법

역원이 많이 필요하다면 원소마다 pow를 호출하는 대신 영리한 선형 순회를 사용해 미리 계산하세요. 다음에 배울 nCr에서 이 방법을 활용합니다.

빠른 확인

소수 모듈러에서 모듈러 역원을 구하려면 어떤 거듭제곱을 사용하나요?

요약

이제 소수 모듈러에서 모듈러 역원을 곱해 나눗셈을 처리할 수 있습니다. 역원은 pow를 사용해 x의 p-2제곱으로 구합니다. 단, 0의 역원은 절대 구하지 마세요. ✅

자주 묻는 질문

“페르마를 이용한 모듈러 역원” 강의는 무료인가요?

네 — “페르마를 이용한 모듈러 역원” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“페르마를 이용한 모듈러 역원”에서 뭘 배우나요?

법 아래에서 안전하게 나눕니다 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“페르마를 이용한 모듈러 역원” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 소수 법에서 계산하기
  2. 빠른 모듈러 거듭제곱
  3. 페르마를 이용한 모듈러 역원
  4. 미리 계산한 팩토리얼로 nCr 구하기
← Coding Interview Prep(으)로 돌아가기