은행수

시간 제한1초메모리 제한128 MB

요약
주어진 정수쌍 (m,n)이 가우스 정수 개념의 소수인지 m^2+n^2의 약수 관계를 이용해 판별합니다.
난이도

보통10점 중 6점

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

문제

은행수란 두 정수 mm과 nn의 순서쌍 (m,n)(m, n)이다. 예를 들어 (1,1)(1, 1), (−2,1)(-2, 1), (−3,−1)(-3, -1)은 모두 은행수이다.

두 은행수의 곱셈은 (m,n)⋅(x,y)=(mx−ny,  my+nx)(m, n) \cdot (x, y) = (mx - ny,\; my + nx)로 정의한다. 예를 들어 (1,1)⋅(−2,1)=(−3,−1)(1, 1) \cdot (-2, 1) = (-3, -1)이다.

어떤 은행수 (x,y)(x, y)가 (m,n)⋅(x,y)=(p,q)(m, n) \cdot (x, y) = (p, q)를 만족하면, (m,n)(m, n)을 은행수 (p,q)(p, q)의 약수라고 한다.

임의의 은행수 (m,n)(m, n)에 대해 (1,0)(1, 0), (0,1)(0, 1), (−1,0)(-1, 0), (0,−1)(0, -1), (m,n)(m, n), (−n,m)(-n, m), (−m,−n)(-m, -n), (n,−m)(n, -m)은 모두 (m,n)(m, n)의 약수이다. m2+n2>1m^2 + n^2 > 1이면 이 여덟 개의 은행수는 서로 다르다. 따라서 m2+n2>1m^2 + n^2 > 1인 은행수는 약수가 적어도 여덟 개이다.

m2+n2>1m^2 + n^2 > 1인 은행수 (m,n)(m, n)의 약수가 정확히 여덟 개이면, 이 수를 소수라고 부른다.

은행수가 주어졌을 때, 그 수가 소수인지 아닌지 판정하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄이며, 은행수 (m,n)(m, n)의 mm과 nn이 공백으로 구분되어 주어진다. (1<m2+n2<200001 < m^2 + n^2 < 20000)

출력

각 테스트 케이스마다, 주어진 은행수가 소수이면 P를, 아니면 C를 한 줄에 출력한다.

힌트

m2+n2>0m^2 + n^2 > 0일 때, m2+n2m^2 + n^2이 mp+nqmp + nq와 mq−npmq - np의 공약수이면 (m,n)(m, n)은 (p,q)(p, q)의 약수이고 그 역도 성립한다.

또한 (m,n)⋅(x,y)=(p,q)(m, n) \cdot (x, y) = (p, q)이면 (m2+n2)(x2+y2)=p2+q2(m^2 + n^2)(x^2 + y^2) = p^2 + q^2이다.

예제2

  1. 예제 1

    입력
    8
    10 0
    0 2
    -3 0
    4 2
    0 -13
    -4 1
    -2 -1
    3 -1
    
    예상 출력
    C
    C
    P
    C
    C
    P
    P
    C
    
  2. 예제 2

    입력
    6
    1 1
    2 0
    3 0
    0 -3
    5 0
    0 -5
    
    예상 출력
    P
    C
    P
    P
    C
    C