만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

신장 트리

시간 제한8초메모리 제한1024 MB

요약
각 정점 쌍 i, j를 gcd(a_i, a_j)개의 서로 다른 간선으로 잇는 그래프에서 신장 트리의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
정수론, 그래프, 행렬
정답자
아직 제출이 없습니다

문제

길이가 nn인 정수 수열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 이 수열로 정점이 nn개인 무방향 그래프를 만든다. 서로 다른 두 정점 ii와 jj (i≠ji \ne j)는 gcd⁡(ai,aj)\gcd(a_i, a_j)개의 서로 구별되는 간선으로 연결된다. 이 그래프의 신장 트리 개수를 구하라. 두 신장 트리는 한쪽에만 들어 있는 간선이 있으면 서로 다른 트리로 본다. 답이 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 정수 nn (1≤n≤50001 \le n \le 5000)이 주어진다. 이는 수열의 길이이자 그래프의 정점 개수이다. 둘째 줄에 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤50001 \le a_i \le 5000)이 주어진다.

출력

그래프의 신장 트리 개수를 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다.

힌트

첫 번째 예제의 그래프는 아래 그림과 같다.

이 그래프의 서로 다른 신장 트리는 정확히 24개이다.

예제1

  1. 예제 1

    입력
    4
    1 2 3 4
    
    예상 출력
    24