만드는 중입니다

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

제거 게임

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

요약
원 위의 수를 하나씩 지우며 양옆 수의 최대공약수를 비용으로 낼 때, 모든 수를 지우는 최소 비용을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 정수론, 구간
정답자
아직 제출이 없습니다

문제

보비는 알고리즘 수업 시간에 혼자 하는 놀이를 하나 만들었다. 먼저 양의 정수 nn개를 원형으로 늘어놓는다. 첫 번째 수의 왼쪽 이웃은 마지막 수이고, 마지막 수의 오른쪽 이웃은 첫 번째 수이다.

보비는 수를 하나씩 지운다. 수 하나를 지우는 비용은 그 수의 양옆에 있는 두 수의 최대공약수이고, 수를 지우면 양옆에 있던 두 수가 서로 이웃이 된다.

예를 들어 수열이 2,3,4,52, 3, 4, 5이면 33을 지우는 비용은 gcd⁡(2,4)=2\gcd(2, 4) = 2, 44를 지우는 비용은 gcd⁡(3,5)=1\gcd(3, 5) = 1, 22를 지우는 비용은 gcd⁡(5,3)=1\gcd(5, 3) = 1, 55를 지우는 비용은 gcd⁡(4,2)=2\gcd(4, 2) = 2이다. 44를 먼저 지우면 그다음에 33을 지우는 비용은 gcd⁡(2,5)=1\gcd(2, 5) = 1로 줄어든다.

수가 두 개 남으면 남은 두 수의 최대공약수를 비용에 더하고 두 수를 한꺼번에 지워 게임을 끝낸다.

수열이 주어지면 모든 수를 지우는 데 드는 비용의 합의 최솟값을 구하여라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄이고, 수열의 길이 nn (2≤n≤1002 \le n \le 100)으로 시작해 수열을 이루는 양의 정수 nn개가 차례로 주어진다. 이 정수는 모두 10001000 이하이다.

마지막 줄에는 00 하나만 주어진다. 테스트 케이스는 10001000개 이하이다.

출력

각 테스트 케이스마다 모든 수를 지우는 최소 비용을 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    4 2 3 4 5
    5 14 2 4 6 8
    0
    
    예상 출력
    3
    8
    
  2. 예제 2

    입력
    2 1 1
    2 1000 1000
    2 999 1000
    2 12 18
    0
    
    예상 출력
    1
    1000
    1
    6
    
  3. 예제 3

    입력
    3 6 10 15
    3 7 7 7
    3 1 1000 1000
    3 1000 1000 999
    0
    
    예상 출력
    4
    14
    2
    2