gcd 놀이

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

요약
초기 수열 뒤에 1 이상 100000 이하의 정수를 K개 붙여, 완성된 수열의 모든 쌍 중 최대공약수의 최댓값과 최솟값의 차를 최대로 만든다.
난이도

어려움10점 중 9점

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

문제

준혁이는 길이가 NN인 수열 AA에서 gcd 놀이를 하고 있다. 준혁이는 이 수열의 뒤에 정수 KK개를 추가하려고 한다.

KK개의 수를 추가한 수열 AA의 점수는 다음과 같이 계산한다.

  • max⁡_1≤i<j≤N+Kgcd⁡(A_i,A_j)−min⁡_1≤i<j≤N+Kgcd⁡(A_i,A_j)\max\limits\_{1 \leq i < j \leq N+K}\gcd(A\_i,A\_j) - \min\limits\_{1 \leq i < j \leq N+K}\gcd(A\_i,A\_j)

준혁이가 11 이상 100,000100\\,000 이하의 임의의 정수 KK개를 수열의 뒤에 추가했을 때, 가능한 수열의 점수의 최댓값을 구하여라.

입력

첫 줄에 테스트케이스의 수 TT가 주어진다. (1≤T≤10)(1 \le T \le 10)

각 테스트케이스는 두 줄로 이루어져있다.

테스트케이스의 첫째 줄에 수열의 초기 길이 NN과 추가할 수의 개수 KK가 공백으로 구분되어 주어진다. (2≤N≤105;(2 \leq N \leq 10^5; 0≤K≤109)0 \leq K \leq 10^9)

테스트케이스의 둘째 줄에 수열을 이루는 정수 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N이 공백으로 구분되어 주어진다. (1≤A_i≤105)(1 \leq A\_i \leq 10^5)

출력

각 테스트케이스마다 한 줄에 하나씩 가능한 수열의 점수의 최댓값을 출력한다.

힌트

gcd⁡(a,b)\gcd(a,b)는 aa와 bb의 최대공약수로 정의된다.

예제1

  1. 예제 1

    입력
    1
    5 1
    2 2 4 8 6
    
    예상 출력
    6