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

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

소수 분할

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

요약
수열을 연속된 k개 구간으로 나누고 각 구간의 공통 소인수 중 가장 큰 값을 구간 점수로 삼아 가장 작은 점수를 최대화합니다.
난이도

어려움10점 중 8점

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

문제

수학과가 전산학과에 이산수학 퍼즐을 하나 냈다.

양의 정수 nn개로 이루어진 수열이 주어진다. 이 수열을 연속한 구간 kk개로 나눈다. 각 구간에는 정수가 적어도 하나 들어가야 하고, 구간을 순서대로 이으면 원래 수열이 된다.

분할의 점수는 이렇게 매긴다. 각 구간마다 그 구간의 모든 정수를 나누는 가장 큰 소수를 찾는다. 소수는 1보다 큰 정수 중 약수가 1과 자기 자신뿐인 수다. 구간의 모든 정수를 나누는 소수가 없으면 그 구간의 점수는 0이다. 분할의 점수는 구간 점수 중 가장 작은 값이다.

kk개 구간으로 나누는 분할이 얻는 점수의 최댓값을 구하라.

입력

첫째 줄에 수열의 길이 nn과 구간의 개수 kk가 주어진다 (1≤n≤200001 \le n \le 20000, 1≤k≤min⁡(100,n)1 \le k \le \min(100, n)).

둘째 줄에 수열을 이루는 정수 v1,v2,…,vnv_1, v_2, \dots, v_n이 순서대로 주어진다 (1≤vi≤10000001 \le v_i \le 1000000).

출력

kk개 구간으로 나누는 분할이 얻는 최대 점수를 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    5 3
    10 5 4 8 3
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5 3
    10 11 12 13 14
    
    예상 출력
    0