gcd와 set

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

요약
인덱스 1..N을 두 집합으로 나누어 각 집합에 대응하는 값들의 최대공약수 합이 최대가 되도록 하는 값을 구한다.
난이도

어려움10점 중 8점

유형
수학, 정수론, 완전 탐색, 해시맵
정답자
아직 제출이 없습니다

문제

길이가 NN인 정수 배열 AA가 주어진다. 집합 S=1,2,…,NS = \\{1, 2, \dots, N\\}를 정의하자. 집합 SS의 부분집합 S′S'에 대해, 다음 값의 최댓값을 구하여라.[1]

gcd_A(S′)+gcd_A(S∖S′)\text{gcd}\_A(S') + \text{gcd}\_A(S \setminus S')

집합 P=p_1,p_2,…,p_kP = \\{p\_1, p\_2, \dots, p\_k\\}일 때, gcd_A(P)\text{gcd}\_A(P)는 A_p_1,A_p_2,…,A_p_kA\_{p\_1}, A\_{p\_2}, \dots, A\_{p\_k}의 최대공약수로 정의한다. 만약 집합 PP가 공집합일 경우에는 gcd_A(∅)=0\text{gcd}\_A(\varnothing) = 0으로 정의한다.

입력

첫 번째 줄에 정수 NN이 주어진다. (1≤N≤106)(1 \leq N \leq 10^6)

두 번째 줄에 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤5 000)(1 \leq A\_i \leq 5\ 000)

출력

첫 번째 줄에 gcd_A(S′)+gcd_A(S∖S′)\text{gcd}\_A(S') + \text{gcd}\_A(S \setminus S')의 최댓값을 출력한다.

힌트

[1] A∖BA \setminus B는 두 집합 AA와 BB의 차집합을 나타내는 기호이다.

예제3

  1. 예제 1

    입력
    4
    2 2 4 4
    
    예상 출력
    6
    
  2. 예제 2

    입력
    4
    2 2 2 2
    
    예상 출력
    4
    
  3. 예제 3

    입력
    1
    5
    
    예상 출력
    5