서브프라임 피보나치 수열

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

요약
나눗셈 규칙으로 수열을 만들며 첫 n항 안에서 반복하는 연속 두 항을 찾아 최소 주기를 구하고 출력합니다.
난이도

보통10점 중 6점

유형
시뮬레이션, 해시맵, 정수론, 구현
정답자
아직 제출이 없습니다

문제

양의 정수 nn에 대한 서브프라임 함수 SP(n)SP(n)은 다음과 같이 정의된다.

  • nn이 1이거나 소수이면 SP(n)=nSP(n) = n
  • 그렇지 않으면 SP(n)=n/pSP(n) = n/p. 여기서 pp는 nn을 나누는 가장 작은 소수이다.

서브프라임 피보나치 수열 ana_n은 다음과 같이 정의된다.

a0,a1은 임의의 값a_0, a_1 \text{은 임의의 값} an+1=SP(an+an−1)a_{n+1} = SP(a_n + a_{n-1})

예를 들어:

0,1,1,2,3,5,4,3,7,5,6,11,17,14,31,15,…0, 1, 1, 2, 3, 5, 4, 3, 7, 5, 6, 11, 17, 14, 31, 15, \ldots

지수적으로 증가하는 일반적인 피보나치 수열과 달리, 서브프라임 피보나치 수열은 보통 언젠가 반복된다.

초기값 a0a_0과 a1a_1, 그리고 계산할 항의 수 nn을 입력으로 받아, a0a_0과 a1a_1로 시작하는 수열이 처음 nn개 항 안에서 반복되는지 판별하는 프로그램을 작성하라.

k<m<nk < m < n인 정수 kk와 mm에 대해 ak=ama_k = a_m이고 ak−1=am−1a_{k-1} = a_{m-1}이면 수열이 반복된다고 한다.

반복 수열의 길이는, k<j<mk < j < m이면서 aj=ama_j = a_m이고 aj−1=am−1a_{j-1} = a_{m-1}인 정수 jj가 없을 때 (m−k)(m - k)이다. 즉, kk부터 mm까지의 수열이 가장 짧은 반복 수열이다.

입력

입력의 첫 줄에는 데이터 세트의 수 PP (1≤P≤10001 \le P \le 1000)가 주어진다. 각 데이터 세트는 서로 독립적으로 동일하게 처리된다.

각 데이터 세트는 한 줄로 주어진다. 데이터 세트 번호 KK, 계산할 항의 최대 개수 nn (0<n≤10000 < n \le 1000), 초기값 a0a_0과 a1a_1이 순서대로 주어진다 (0<a0,a1≤10000 < a_0, a_1 \le 1000).

출력

각 데이터 세트에 대해 출력은 여러 줄이다.

반복되는 수열을 찾으면, 출력의 첫 줄에는 데이터 세트 번호 KK, 수열이 처음 반복된 인덱스 mm, 가장 짧은 반복 부분 수열의 길이가 주어진다. 그다음 줄들에는 k−1k-1번째 항부터 mm번째 항까지의 (길이 + 2)개 항이 주어지며, 한 줄에 20개씩 출력한다 (마지막 줄은 예외일 수 있다).

처음 nn개 항 안에서 반복되는 수열을 찾지 못하면, 출력의 첫 줄에는 데이터 세트 번호 KK, 항의 개수 nn, 숫자 0이 주어진다. 그다음 줄에는 nn에서의 수열 값 ana_n (즉 (n+1)(n+1)번째 항)만 출력한다.

예제1

  1. 예제 1

    입력
    3
    1 1000 0 1
    2 10 31 23
    3 200 15 17
    
    예상 출력
    1 57 18
    48 13 61 37 49 43 46 89 45 67 56 41 97 69 83 76 53 43 48 13
    2 10 0
    88
    3 137 136
    15 17 16 11 9 10 19 29 24 53 11 32 43 25 34 59 31 45 38 83
    11 47 29 38 67 35 51 43 47 45 46 13 59 36 19 11 15 13 14 9
    23 16 13 29 21 25 23 24 47 71 59 65 62 127 63 95 79 87 83 85
    84 13 97 55 76 131 69 100 13 113 63 88 151 239 195 217 206 141 347 244
    197 147 172 29 67 48 23 71 47 59 53 56 109 55 82 137 73 105 89 97
    93 95 94 63 157 110 89 199 144 49 193 121 157 139 148 41 63 52 23 25
    24 7 31 19 25 22 47 23 35 29 32 61 31 46 11 19 15 17