최대공약수
시간 제한5초메모리 제한1024 MB
1부터 n까지의 정수 쌍 (x, y) 중 div를 쓴 유클리드 알고리즘이 끝나고 올바른 최대공약수를 내는 쌍을 사전순으로 세어, 각 질의의 p번째 쌍을 구합니다.
문제
겐나디는 공부 중인 프로그래머다. 그는 두 양의 정수의 최대공약수를 구하는 유클리드 호제법을 배우고 있다.
겐나디는 정수 나눗셈 연산자(div)와 나머지 연산자(mod)를 자주 헷갈린다. 예를 들어 div 이고, mod 이다.
겐나디가 작성한 유클리드 알고리즘은 다음과 같다:
- 입력: 두 양의 정수 와 .
- 인 동안 를
div로 바꾸고, 그다음 와 를 서로 바꾼다. - 출력: .
겐나디가 div 대신 mod를 썼다면 알고리즘은 와 의 최대공약수를 올바르게 찾았을 것이다. 그러나 이 버그에도 알고리즘이 올바르게 동작하는 경우가 있다.
겐나디는 을 만족하고, 알고리즘이 종료되며 올바른 답을 출력하는 모든 입력 쌍 를 찾고자 한다. 이런 쌍을 사전순으로 나열한 것을 라 한다.
또한 개의 질의가 주어진다. 번째 질의는 양의 정수 이며, 번째 쌍의 와 를 출력하거나, 임을 보고한다.
입력
첫 줄에 정수 과 가 주어진다. 은 입력 값의 상한이고, 는 질의의 개수다 ().
이후 개의 줄에 각각 정수 하나가 주어진다 ().
출력
각 질의에 대해 두 정수를 출력한다. 알고리즘이 종료되고 올바른 답을 내는 쌍 중 사전순으로 번째인 쌍의 와 를 출력한다. 그런 쌍이 개보다 적으면 -1 -1을 출력한다.