(Relatively) Prime
시간 제한2초메모리 제한1024 MB
소수 p와 큰 n, m이 주어진 질의마다 gcd(a, b) = p인 양의 정수 a, b에 대해 gcd(a^n, b^m)이 가질 수 있는 서로 다른 값의 합을 998244353으로 나눈 나머지를 구한다.
문제
소수 가 주어진다. 를 만족하는 양의 정수 와 에 대해,
으로 가능한 서로 다른 모든 값의 합을 구해보자. 이때, 답이 매우 커질 수 있으므로 으로 나눈 나머지를 출력하라. 은 소수이다.
입력
첫 번째 줄에 테스트케이스의 개수를 나타내는 정수 가 주어진다. ()
두 번째 줄부터 개의 줄에 걸쳐 소수 와 정수 과 이 공백으로 구분되어 주어진다. (, )
출력
개의 줄에 걸쳐, 각 테스트케이스에 대한 답을 한 줄에 하나씩 출력하라.
힌트
입출력의 양이 많으므로, 빠른 입출력을 사용하는 것을 권장합니다. 다음은 대표적인 언어에서 빠른 입출력을 이용하는 방법입니다.
- C++:
cin,cout을 사용한다면main함수 첫 줄에std::cin.tie(nullptr); std::cout.tie(nullptr); std::ios_base::sync_with_stdio(false);를 추가하고, 줄바꿈 시std::endl대신'\n'을 출력해주세요. 이 경우scanf를 비롯한 C의 입출력 함수는 사용할 수 없음에 유의해 주세요.scanf/printf는 충분히 빠르므로 별도의 처리를 하지 않아도 괜찮습니다.
- Java:
Scanner와System.out.println대신BufferedReader와BufferedWriter를 사용해 주세요. - Python3, PyPy3:
input()대신sys.stdin.readline().rstrip()을 사용해 주세요.