곱셈 역원

IT 위키

곱셈 역원(乘法逆元, multiplicative inverse)은 어떤 수에 대해 곱했을 때 1이 되는 수를 말한다. 주로 모듈로 연산(modular arithmetic)에서 사용되며, 나눗셈을 곱셈으로 바꾸기 위해 활용된다.

개요[편집 | 원본 편집]

정수 a에 대해 어떤 수 x가 존재해서 다음을 만족하면, x는 a의 곱셈 역원이다.

a * x ≡ 1 (mod m)

여기서 ≡ 기호는 "동치(congruence)"를 의미하며, a * x를 m으로 나눈 나머지가 1과 같다는 뜻이다. 즉,

a * x % m == 1

과 같은 의미이다.

존재 조건[편집 | 원본 편집]

곱셈 역원 x가 존재하려면 다음 조건이 충족되어야 한다.

  • a와 m이 서로소여야 한다. 즉, gcd(a, m) = 1이어야 한다.
  • 이 조건이 성립할 때만 a의 역원이 (mod m)에서 존재한다.

계산 방법[편집 | 원본 편집]

  • 브루트포스 방법
x = 1부터 m-1까지 순차적으로 대입하여 a * x % m == 1이 되는 x를 찾는다.
  • 확장 유클리드 알고리즘
a * x + m * y = 1이 되는 정수 x, y를 구하고, x % m을 곱셈 역원으로 사용한다.
  • 페르마의 소정리 (m이 소수일 경우)
x = a^(m - 2) % m을 계산하여 곱셈 역원을 구할 수 있다.

예시[편집 | 원본 편집]

  • a = 3, m = 7인 경우:
3 * 5 = 15, 15 % 7 = 1 → 5는 3의 곱셈 역원이다.
  • a = 4, m = 10인 경우:
gcd(4, 10) = 2 → 서로소가 아니므로 역원이 존재하지 않는다.

활용[편집 | 원본 편집]

  • 모듈로 나눗셈 구현
  • RSA 암호 알고리즘
  • 선형 합동 방정식 해법
  • 프로그래밍 대회나 수론 기반 알고리즘 문제 해결

파이썬 구현[편집 | 원본 편집]

# 확장 유클리드 알고리즘을 이용한 곱셈 역원
def modinv(a, m):
    def egcd(a, b):
        if b == 0:
            return (1, 0)
        x1, y1 = egcd(b, a % b)
        x, y = y1, x1 - (a // b) * y1
        return (x, y)

    x, y = egcd(a, m)
    if (a * x + m * y) % m != 1:
        raise ValueError("No modular inverse exists")
    return x % m

# 예시
print(modinv(3, 7))  # 출력: 5

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • Rosen, K. H. (2011). Elementary Number Theory and Its Applications. Pearson.
  • Cormen, T. H. et al. (2009). Introduction to Algorithms. MIT Press.