배열의 최대공약수

한 개의 연속 구간을 지우고 각 원소를 최대 한 번 1만큼 바꿔 나머지 배열의 최대공약수가 1보다 커지도록 만드는 최소 비용을 구한다.

어려움8정수론그리디동적 계획법구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정수 NN개로 이루어진 배열 a1,a2,,aNa_1, a_2, \dots, a_N이 주어진다. 이 배열에 다음 두 종류의 연산을 수행할 수 있다.

  1. 배열에서 길이가 mm인 연속한 구간을 삭제한다.
  2. 배열에 있는 수 aia_i에 1을 더하거나 뺀다.

1번 연산은 전체에서 최대 한 번만 수행할 수 있고, 2번 연산은 각 수마다 최대 한 번만 수행할 수 있다. 1번 연산을 수행할 때는 1m<N1 \le m < N이어야 하므로 배열 전체를 삭제할 수는 없다.

1번 연산의 비용은 m×Am \times A이고, 2번 연산의 비용은 한 번에 BB이다. 연산을 모두 마친 뒤 남은 배열의 최대공약수가 1보다 커지도록 만들려고 한다. 이때 필요한 최소 비용을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN, AA, BB가 주어진다. (1N10000001 \le N \le 1\,000\,000, 1A,B1091 \le A, B \le 10^9)

둘째 줄에 배열에 들어 있는 수 a1,a2,,aNa_1, a_2, \dots, a_N이 주어진다. (2ai1092 \le a_i \le 10^9)

출력

첫째 줄에 배열의 최대공약수를 1보다 크게 만드는 최소 비용을 출력한다.

힌트

첫 번째 예제는 1번 연산으로 세 번째 수를 삭제하면 최소 비용이 된다.

두 번째 예제는 1번 연산으로 두 번째 수부터 세 번째 수까지 삭제하고, 2번 연산으로 다섯 번째 수를 1 줄이면 최소 비용이 된다.