아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

최대공약수 합

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

요약
n개의 수로 이루어진 중복집합을 k개의 비어 있지 않은 그룹으로 나눌 때 각 그룹의 최대공약수 합을 최대로 만드는 값을 k = 1부터 n까지 모두 구한다. n은 500000 이하이고 각 수는 10^12 이하다.
난이도

어려움10점 중 9점

유형
정수론, 그리디, 수학, 정렬
정답자
아직 제출이 없습니다

문제

정수 nn개로 이루어진 다중집합이 주어진다. 같은 수가 여러 번 나올 수 있다. 이 다중집합을 비어 있지 않은 kk개의 그룹으로 나누면 모든 원소는 정확히 한 그룹에 속한다. 그룹마다 원소의 최대공약수를 구한 다음, 구한 값을 모두 더한다.

k=1,2,…,nk = 1, 2, \ldots, n 각각에 대해 이렇게 얻을 수 있는 합의 최댓값을 구하라.

입력

첫째 줄에 다중집합의 크기 nn이 주어진다 (1≤n≤500 0001 \leq n \leq 500\,000).

둘째 줄에 수열을 이루는 양의 정수 nn개가 주어진다. 각 정수는 101210^{12} 이하이다.

출력

nn개의 줄을 출력한다. ii번째 줄에는 다중집합을 k=ik = i개의 그룹으로 나눌 때 최대공약수의 합이 가질 수 있는 최댓값을 출력한다.

힌트

수열이 10,9,10,310, 9, 10, 3이면 k=2k = 2의 최적 분할은 (10,10)(10, 10)과 (9,3)(9, 3)이고 합은 10+3=1310 + 3 = 13이다. k=3k = 3의 최적 분할은 (10)(10), (10)(10), (9,3)(9, 3)이고 합은 2323이다.

예제2

  1. 예제 1

    입력
    4
    10 9 10 3
    
    예상 출력
    1
    13
    23
    32
    
  2. 예제 2

    입력
    8
    15 25 29 30 43 44 45 55
    
    예상 출력
    1
    56
    101
    145
    188
    221
    256
    286