만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

RSA

시간 제한2초메모리 제한512 MB

요약
N을 두 소인수로 분해해 phi(N)을 구한 뒤, 모듈로 역원과 빠른 거듭제곱으로 C를 복호화해 M을 출력한다.
난이도

보통10점 중 5점

유형
정수론, 수학
정답자
아직 제출이 없습니다

문제

RSA는 널리 쓰이는 공개키 암호 알고리즘 가운데 하나다. 기본 동작은 다음과 같다.

서로 다른 두 홀수 소수 PP와 QQ를 골라 N=PQN = PQ를 계산한다. 이어서 오일러 피 함수 값 φ(N)=(P−1)(Q−1)\varphi(N) = (P - 1)(Q - 1)을 구하고, 1<E<φ(N)1 < E < \varphi(N)이면서 gcd⁡(φ(N),E)=1\gcd(\varphi(N), E) = 1인 정수 EE를 하나 고른다. 마지막으로 φ(N)\varphi(N)을 법으로 하는 EE의 곱셈 역원 DD, 즉 DE≡1(modφ(N))DE \equiv 1 \pmod{\varphi(N)}을 만족하는 정수 DD를 계산한다.

이렇게 두 정수 NN과 EE로 이루어진 공개키와, 두 정수 NN과 DD로 이루어진 비밀키를 얻는다.

0<M<N0 < M < N인 메시지 MM을 암호화할 때는 C=ME mod NC = M^E \bmod N을 계산하고, 이 CC가 암호문이다. 암호문을 복호화해 원래 메시지를 되찾을 때는 M=CD mod NM = C^D \bmod N을 계산한다. 복호화에는 비밀키가 필요하고 공개키만으로는 부족하다. 위에서 쓴 x≡1(mody)x \equiv 1 \pmod{y}는 xx를 yy로 나눈 나머지가 1이라는 뜻이다.

이 문제에서는 RSA 암호를 깨야 한다. 공개키 NN, EE와 암호문 CC만 보고 원래 메시지 MM을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 NN, EE, CC가 공백으로 구분되어 주어진다. 15≤N≤10915 \le N \le 10^9, 1≤E<N1 \le E < N, 1≤C<N1 \le C < N이다.

NN과 EE는 위에서 설명한 RSA의 공개키이고, CC는 이 공개키로 암호화한 메시지다. NN은 서로 다른 두 홀수 소수의 곱이고, gcd⁡(φ(N),E)=1\gcd(\varphi(N), E) = 1이 항상 성립한다.

출력

원래 메시지 MM을 한 줄에 출력한다. 1≤M<N1 \le M < N이다.

예제2

  1. 예제 1

    입력
    1073 71 436
    
    예상 출력
    726
    
  2. 예제 2

    입력
    91 43 19
    
    예상 출력
    33