아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

모듈러 역공학

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

요약
소수 m과 v, x가 주어질 때 p/q가 [x, x+1)에 속하고 v와 합동이 되는 가장 작은 p와 그에 맞는 q를 구한다.
난이도

보통10점 중 7점

유형
정수론, 수학, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

경쟁 프로그래밍 문제 중에는 출력이 유리수 pq\frac{p}{q}인 경우, 그 대신 pq−1 mod mpq^{-1} \bmod m을 출력하라고 요구하는 문제가 있다. 여기서 mm은 소수이다. 그런데 프로그램이 틀린 답을 낼 때 이 값을 디버깅하기는 어렵다. q−1q^{-1}을 손으로 계산하기도 힘들고, 작은 유리수에 대해서도 이 값의 크기가 아주 커질 수 있기 때문이다. 예를 들어 1⋅2−1 mod 97=491 \cdot 2^{-1} \bmod 97 = 49이다.

풀이를 빠르게 디버깅하려면 pq−1 mod mpq^{-1} \bmod m이 주어졌을 때 pp와 qq를 복원하는 프로그램을 만들고 싶다. 가능한 pp와 qq의 값은 유일하지 않지만, 범위를 좁히는 데 도움이 되는 정보가 있다. 바로 pq\frac{p}{q}를 보통의 유리수로 해석했을 때 어떤 정수 xx에 대해 [x,x+1)[x, x + 1) 범위에 있다는 것이다.

세 값 vv, xx, mm이 주어질 때, 0≤p,q<m0 \leq p, q < m이고 pq−1≡v mod mpq^{-1} \equiv v \bmod m이며 x≤pq<x+1x \leq \frac{p}{q} < x + 1을 만족하는 pp의 최솟값과 그에 대응하는 qq를 구하라.

입력

입력은 한 줄이며, 공백으로 구분된 세 정수 vv, xx, mm이 주어진다. 여기서 3≤m≤1063 \leq m \leq 10^6, 1≤v<m1 \leq v < m, 0≤x<m0 \leq x < m이고 mm은 소수이다.

출력

0≤p,q<m0 \leq p,q < m, pq−1≡v mod mpq^{-1} \equiv v \bmod m, x≤pq<x+1x \leq \frac{p}{q} < x + 1을 만족하는 최소 정수 pp와 그에 대응하는 qq를 출력한다. 그러한 pp와 qq가 여러 쌍이면 pp가 최소인 쌍을 출력한다. 그러한 pp와 qq가 존재하지 않으면 대신 −1-1 하나를 출력한다.

예제2

  1. 예제 1

    입력
    3 1 17
    
    예상 출력
    10 9
    
  2. 예제 2

    입력
    3 2 17
    
    예상 출력
    -1