합성소수

시간 제한1초메모리 제한1024 MB

요약
최대 10^7까지의 N에 대해 두 자리 이상인 모든 연속 부분수가 소수이면서 자신은 합성수인 가장 큰 수를 최대 10만 개의 질의에서 구합니다.
난이도

보통10점 중 6점

유형
백트래킹, 수학, 이분 탐색, 문자열
정답자
아직 제출이 없습니다

문제

13131313은 13×10113 \times 101로 소인수분해되므로 합성수이다. 그러나 13131313에서 연속한 두 자리 이상을 골라 만든 자기 자신이 아닌 수 1313, 3131, 1313, 131131, 313313은 모두 소수이다.

이 문제에서 세 자리 이상의 양의 정수 NN에 대해 연속 부분수를 다음과 같이 정의한다. NN의 십진수 표현에서 연속한 2개 이상의 숫자를 선택하고, 순서를 유지해 만든 수 중 NN 자신을 제외한 음이 아닌 정수이다.

양의 정수 NN이 다음 세 조건을 모두 만족하면 합성소수라고 부른다.

  • NN은 세 자리 이상이다.
  • NN은 합성수이다.
  • NN의 모든 연속 부분수가 소수이다.

연속 부분수는 00으로 시작할 수 있으며, 00 자체도 가능한 값으로 다룬다. 예를 들어 2002320023의 연속 부분수에는 2020, 00(=0)00(=0), 02(=2)02(=2), 2323, 200200, 002(=2)002(=2), 023(=23)023(=23), 20022002, 0023(=23)0023(=23)이 포함된다. 이 중 2020은 소수가 아니므로 2002320023은 합성소수가 아니다.

양의 정수 NN이 주어질 때, NN 이하인 합성소수 중 가장 큰 값을 구하라.

입력

첫 줄에 테스트 케이스 수 TT가 주어진다. (1≤T≤105)(1 \le T \le 10^5)

다음 TT개 줄에는 각각 정수 NN이 하나씩 주어진다. (1≤N≤107)(1 \le N \le 10^7)

출력

각 테스트 케이스마다 NN 이하인 합성소수 중 가장 큰 값을 한 줄에 하나씩 출력한다. 그런 수가 없으면 −1-1을 출력한다.

출력값은 입력 순서와 같은 순서로 출력한다.

예제1

  1. 예제 1

    입력
    8
    100
    200
    300
    400
    600
    800
    1000
    1200
    
    예상 출력
    -1
    171
    297
    371
    597
    737
    979
    1137