최대공약수 행렬의 행렬식

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

요약
약수로 닫힌 집합이 주어질 때 원소들 간의 gcd 행렬의 행렬식을 오일러 파이함수를 이용한 스미스 정리로 계산해 1,000,000,007로 나눈 나머지를 구합니다.
난이도

보통10점 중 6점

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

문제

집합 S={x1,x2,…,xn}S = \{x_1, x_2, \ldots, x_n\}가 약수에 대해 닫혀 있다는 것은, 모든 xi∈Sx_i \in S에 대해 xix_i의 모든 약수 dd가 d∈Sd \in S를 만족한다는 뜻입니다.

약수에 대해 닫힌 집합 SS로 최대공약수 행렬 (S)=(sij)(S) = (s_{ij})를 만듭니다. 여기서 sij=gcd⁡(xi,xj)s_{ij} = \gcd(x_i, x_j)입니다. 이 행렬의 행렬식(determinant)을 구하는 프로그램을 작성하세요.

Dn=∣gcd⁡(x1,x1)gcd⁡(x1,x2)⋯gcd⁡(x1,xn)gcd⁡(x2,x1)gcd⁡(x2,x2)⋯gcd⁡(x2,xn)⋮⋮⋱⋮gcd⁡(xn,x1)gcd⁡(xn,x2)⋯gcd⁡(xn,xn)∣D_n = \begin{vmatrix} \gcd(x_1,x_1) & \gcd(x_1,x_2) & \cdots & \gcd(x_1,x_n) \\ \gcd(x_2,x_1) & \gcd(x_2,x_2) & \cdots & \gcd(x_2,x_n) \\ \vdots & \vdots & \ddots & \vdots \\ \gcd(x_n,x_1) & \gcd(x_n,x_2) & \cdots & \gcd(x_n,x_n) \end{vmatrix}

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어집니다. 각 테스트 케이스의 첫째 줄에는 집합 SS의 원소 개수 nn (0<n<10000 < n < 1000)이 주어집니다. 다음 줄에는 집합의 원소 x1,x2,…,xnx_1, x_2, \ldots, x_n이 주어집니다. (0<xi<2×1090 < x_i < 2 \times 10^9이고, 각 xix_i는 정수입니다.)

출력

각 테스트 케이스마다 입력으로 주어진 집합 SS의 최대공약수 행렬식을 1,000,000,0071{,}000{,}000{,}007으로 나눈 나머지를 출력합니다.

예제1

  1. 예제 1

    입력
    3
    2
    1 2
    3
    1 3 9
    4
    1 2 3 6
    
    예상 출력
    1
    12
    4