gcd와 set
시간 제한1초메모리 제한1024 MB
인덱스 1..N을 두 집합으로 나누어 각 집합에 대응하는 값들의 최대공약수 합이 최대가 되도록 하는 값을 구한다.
시간 제한1초메모리 제한1024 MB
인덱스 1..N을 두 집합으로 나누어 각 집합에 대응하는 값들의 최대공약수 합이 최대가 되도록 하는 값을 구한다.
길이가 N인 정수 배열 A가 주어진다. 집합 S=1,2,…,N를 정의하자. 집합 S의 부분집합 S′에 대해, 다음 값의 최댓값을 구하여라.[1]
gcd_A(S′)+gcd_A(S∖S′)
집합 P=p_1,p_2,…,p_k일 때, gcd_A(P)는 A_p_1,A_p_2,…,A_p_k의 최대공약수로 정의한다. 만약 집합 P가 공집합일 경우에는 gcd_A(∅)=0으로 정의한다.
첫 번째 줄에 정수 N이 주어진다. (1≤N≤106)
두 번째 줄에 N개의 정수 A_1,A_2,⋯,A_N이 공백으로 구분되어 주어진다. (1≤A_i≤5 000)
첫 번째 줄에 gcd_A(S′)+gcd_A(S∖S′)의 최댓값을 출력한다.
[1] A∖B는 두 집합 A와 B의 차집합을 나타내는 기호이다.
예제 1
4 2 2 4 4
6
예제 2
4 2 2 2 2
4
예제 3
1 5
5