인수분해

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

요약
소수 p와 잉여 a0, a1이 주어질 때 b0*b1 ≡ a0, b0+b1 ≡ a1 (mod p)를 만족하는 b0, b1을 구하거나 해가 없음을 판정한다.
난이도

보통10점 중 6점

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

문제

정수 인수분해는 여러 암호 체계에서 중요한 역할을 한다. 양의 합성수 nn이 주어졌을 때 n=pqn = pq이고 1<p≤q<n1 < p \le q < n인 두 양의 정수 pp와 qq를 찾는 문제다. 하지만 이는 잘 알려진 NP-중간 후보로, 다항 시간에 해결하는 알고리즘은 아직 없다.

수론을 연구하는 Taylor는 다음과 같은 새로운 인수분해 문제를 만들었다.

소수 pp와 두 정수 a0,a1∈{0,1,…,p−1}a_0, a_1 \in \{0, 1, \ldots, p - 1\}이 주어진다. a0≡b0⋅b1(modp)a_0 \equiv b_0 \cdot b_1 \pmod{p}이고 a1≡b0+b1(modp)a_1 \equiv b_0 + b_1 \pmod{p}인 두 정수 b0,b1∈{0,1,…,p−1}b_0, b_1 \in \{0, 1, \ldots, p - 1\}을 찾아라.

"이 인수분해는 효율적으로 계산할 수 있다는 점에서 훨씬 멋지다"라고 Taylor는 말했다. 이제 그는 여러분을 이 새로운 형태의 인수분해에 초대한다.

입력

첫째 줄에는 테스트 케이스의 수를 나타내는 정수 1≤T≤1001 \le T \le 100이 주어진다. 각 테스트 케이스마다 한 줄에 공백 하나로 구분된 세 개의 음이 아닌 정수 p,a0,a1p, a_0, a_1이 주어진다.

출력

각 테스트 케이스마다 한 줄에 b0b_0과 b1b_1이 주어진 두 식을 만족하면 b0b_0과 b1b_1을 오름차순으로 공백 하나로 구분하여 출력한다. 해가 여러 개라면 그중 아무거나 출력해도 된다. 해가 없으면 −1-1을 출력한다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1<p<2311 < p < 2^{31}이고 pp는 소수다.
  • a0,a1∈{0,1,…,p−1}a_0, a_1 \in \{0, 1, \ldots, p - 1\}.

예제1

  1. 예제 1

    입력
    2
    2 1 0
    2 1 1
    
    예상 출력
    1 1
    -1