정수론 싫어

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

요약
100만 미만의 각 구간 [L, U]마다 모든 부분 구간 [a, b]에서 소인수 개수로 만든 점수의 최댓값을 구한다.
난이도

보통10점 중 7점

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

문제

정수론 중간고사가 끝났지만, 하필 공부하지 못한 오일러 피 함수(φ\varphi)에서만 문제가 나와 곤란해진 한 학생이 직접 자신만의 Totient 함수를 정의하기로 했다.

n≥2n \ge 2인 정수에 대해, F(n)F(n)을 곱이 nn이 되는 감소하지 않는 소수들의 리스트로 정의한다. 예를 들어 F(8)=⟨2,2,2⟩F(8) = \langle 2, 2, 2 \rangle, F(60)=⟨2,2,3,5⟩F(60) = \langle 2, 2, 3, 5 \rangle, F(71)=⟨71⟩F(71) = \langle 71 \rangle 이다. O(n)O(n)은 F(n)F(n)의 길이, 즉 중복을 포함한 소인수의 개수이다. 따라서 O(8)=3O(8) = 3, O(60)=4O(60) = 4, O(71)=1O(71) = 1 이다.

이제 양의 정수 nn에 대해 p(n)p(n)을 다음과 같이 정의한다.

p(n)={0(n=1)−1(n 이 소수)O(n)(그 외)p(n) = \begin{cases} 0 & (n = 1) \\ -1 & (n \text{ 이 소수}) \\ O(n) & (\text{그 외}) \end{cases}

다음 표는 p(n)p(n)의 처음 2020개 값이다.

nn11223344556677889910101111121213131414151516161717181819192020
p(n)p(n)00−1-1−1-122−1-122−1-1332222−1-133−1-1222244−1-133−1-133

a≤ba \le b인 두 양의 정수 aa, bb에 대해 Totient 함수 φ(a,b)\varphi(a, b)를 다음과 같이 정의한다.

φ(a,b)=(∑k=abp(k))−(b−a+1)\varphi(a, b) = \left( \sum_{k=a}^{b} p(k) \right) - (b - a + 1)

예를 들어 φ(1,4)=−4\varphi(1, 4) = -4, φ(16,16)=3\varphi(16, 16) = 3, φ(8,12)=4\varphi(8, 12) = 4 이다.

구간 [L,U][L, U]가 주어졌을 때, L≤a≤b≤UL \le a \le b \le U를 만족하는 aa, bb 중에서 φ(a,b)\varphi(a, b)의 최댓값을 구하는 프로그램을 작성하시오. 예를 들어 구간 [1,20][1, 20]에서 최댓값은 77이며, 이는 φ(8,16)\varphi(8, 16)에서 얻어진다.

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 테스트 케이스의 수는 최대 7 0007\,000개이다. 각 테스트 케이스는 한 줄에 두 정수 LL과 UU로 주어진다. (1≤L≤U<1 000 0001 \le L \le U < 1\,000\,000)

입력의 마지막 줄에는 −1-1이 두 개 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄씩, 구간 [L,U][L, U]에서 얻을 수 있는 φ(a,b)\varphi(a, b)의 최댓값을 출력한다. 각 줄은 <테스트 케이스 번호>. <최댓값> 형식으로 출력하며, 테스트 케이스 번호는 11부터 순서대로 매긴다.

예제4

  1. 예제 1

    입력
    1 5
    1 20
    10 20
    900000 901000
    -1 -1
    
    예상 출력
    1. 1
    2. 7
    3. 5
    4. 2551
    
  2. 예제 2

    입력
    16 16
    -1 -1
    
    예상 출력
    1. 3
    
  3. 예제 3

    입력
    8 12
    -1 -1
    
    예상 출력
    1. 4
    
  4. 예제 4

    입력
    1 4
    8 12
    16 16
    -1 -1
    
    예상 출력
    1. 1
    2. 4
    3. 3