RSA

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

보통5정수론수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

서로 다른 두 홀수 소수 PPQQ를 골라 N=PQN = PQ를 계산한다. 이어서 오일러 피 함수 값 φ(N)=(P1)(Q1)\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, 즉 DE1(modφ(N))DE \equiv 1 \pmod{\varphi(N)}을 만족하는 정수 DD를 계산한다.

이렇게 두 정수 NNEE로 이루어진 공개키와, 두 정수 NNDD로 이루어진 비밀키를 얻는다.

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

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

입력

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

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

출력

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