등차수열에 관한 디리클레의 정리

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

요약
n의 주어진 구간에서 a*n+b 꼴 항 중 소수인 것의 개수를 센다. 항의 값은 10^12까지 커지고 한 테스트당 항은 최대 10^6개다.
난이도

보통10점 중 6점

유형
정수론, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

등차수열에 관한 디리클레의 정리는 다음과 같다. 서로소인 두 양의 정수 aa와 bb에 대하여, 등차수열 t(n)=a⋅n+bt(n) = a \cdot n + b (n≥0n \ge 0)에는 무한히 많은 소수가 들어 있다.

소수란 11보다 큰 양의 정수 중에서 약수가 11과 자기 자신뿐인 수를 말한다.

예를 들어 a=4a = 4, b=3b = 3이면 등차수열은 다음과 같다.

3, 7, 11, 15, 19, 23, 27, 31, 35, …3,\ 7,\ 11,\ 15,\ 19,\ 23,\ 27,\ 31,\ 35,\ \dots

수열의 앞부분만 보아도 소수가 많이 들어 있음을 알 수 있다.

양의 정수 a>0a > 0, 정수 b≥0b \ge 0, 그리고 U≥L≥0U \ge L \ge 0이 주어질 때, L≤n≤UL \le n \le U 범위에서 t(n)=a⋅n+bt(n) = a \cdot n + b가 소수인 항이 몇 개인지 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 네 정수 aa, bb, LL, UU가 주어진다. a⋅U+b≤1012a \cdot U + b \le 10^{12}이고 U−L≤106U - L \le 10^{6}이다. 입력의 마지막 줄에는 00 하나만 주어지며, 이는 입력의 끝을 뜻한다.

출력

각 테스트 케이스마다 Case x: c 형식으로 한 줄씩 출력한다. 여기서 xx는 11부터 시작하는 테스트 케이스 번호이고, cc는 L≤n≤UL \le n \le U 범위에서 t(n)t(n)이 소수인 항의 개수이다.

예제3

  1. 예제 1

    입력
    4 3 0 8
    1 0 2 100
    2 7 0 1000
    0
    
    예상 출력
    Case 1: 6
    Case 2: 25
    Case 3: 301
    
  2. 예제 2

    입력
    1 0 0 1
    0
    
    예상 출력
    Case 1: 0
    
  3. 예제 3

    입력
    1 2 0 0
    0
    
    예상 출력
    Case 1: 1