질투하는 수

시간 제한3초메모리 제한256 MB

요약
1부터 10^18 범위에서 소수 p의 지수가 소수 q의 지수보다 큰 정수 n의 개수를 구하는 문제입니다.
난이도

보통10점 중 6점

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

문제

수의 나라에서 소수 pp가 소수 qq를 부러워한다. 두 소수의 우열을 가리기 위해, 주어진 구간 안에서 pp가 qq를 "이기는" 수가 몇 개인지 센다.

양의 정수 nn과 소수 xx에 대해, xkx^k이 nn을 나누는 가장 큰 정수 kk를 α(n,x)\alpha(n, x)로 정의한다. 즉 α(n,x)\alpha(n, x)는 nn의 소인수분해에서 xx의 지수이다.

α(n,p)>α(n,q)\alpha(n, p) > \alpha(n, q)일 때 nn을 qq에 대해 pp-우세(pp-dominating) 하다고 한다.

aa, bb, pp, qq가 주어질 때, a≤n≤ba \le n \le b인 정수 nn 중에서 qq에 대해 pp-우세한 수가 몇 개인지 구하라.

입력

첫 줄에 네 정수 aa, bb, pp, qq가 주어진다 (1≤a≤b≤10181 \le a \le b \le 10^{18}; 2≤p,q≤1092 \le p, q \le 10^9; p≠qp \ne q; pp와 qq는 모두 소수).

출력

[a,b][a, b] 안에서 qq에 대해 pp-우세한 정수 nn의 개수를 정수 하나로 출력한다.

힌트

예시에서 [1,20][1, 20] 안의 정수 중 22에 대해 33-우세한 수는 33, 99, 1515, 1818이다.

예제3

  1. 예제 1

    입력
    1 20 3 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    10 20 3 2
    
    예상 출력
    2
    
  3. 예제 3

    입력
    9 9 3 2
    
    예상 출력
    1