서브프라임 피보나치 수열
시간 제한2초메모리 제한512 MB
나눗셈 규칙으로 수열을 만들며 첫 n항 안에서 반복하는 연속 두 항을 찾아 최소 주기를 구하고 출력합니다.
문제
양의 정수 에 대한 서브프라임 함수 은 다음과 같이 정의된다.
- 이 1이거나 소수이면
- 그렇지 않으면 . 여기서 는 을 나누는 가장 작은 소수이다.
서브프라임 피보나치 수열 은 다음과 같이 정의된다.
예를 들어:
지수적으로 증가하는 일반적인 피보나치 수열과 달리, 서브프라임 피보나치 수열은 보통 언젠가 반복된다.
초기값 과 , 그리고 계산할 항의 수 을 입력으로 받아, 과 로 시작하는 수열이 처음 개 항 안에서 반복되는지 판별하는 프로그램을 작성하라.
인 정수 와 에 대해 이고 이면 수열이 반복된다고 한다.
반복 수열의 길이는, 이면서 이고 인 정수 가 없을 때 이다. 즉, 부터 까지의 수열이 가장 짧은 반복 수열이다.
입력
입력의 첫 줄에는 데이터 세트의 수 ()가 주어진다. 각 데이터 세트는 서로 독립적으로 동일하게 처리된다.
각 데이터 세트는 한 줄로 주어진다. 데이터 세트 번호 , 계산할 항의 최대 개수 (), 초기값 과 이 순서대로 주어진다 ().
출력
각 데이터 세트에 대해 출력은 여러 줄이다.
반복되는 수열을 찾으면, 출력의 첫 줄에는 데이터 세트 번호 , 수열이 처음 반복된 인덱스 , 가장 짧은 반복 부분 수열의 길이가 주어진다. 그다음 줄들에는 번째 항부터 번째 항까지의 (길이 + 2)개 항이 주어지며, 한 줄에 20개씩 출력한다 (마지막 줄은 예외일 수 있다).
처음 개 항 안에서 반복되는 수열을 찾지 못하면, 출력의 첫 줄에는 데이터 세트 번호 , 항의 개수 , 숫자 0이 주어진다. 그다음 줄에는 에서의 수열 값 (즉 번째 항)만 출력한다.