아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Oleg와 데이터 과학

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

요약
구간 [L, R]의 모든 S에 대해 ((S mod Q) mod X) = (S mod X)를 만족하는 양의 정수 X의 개수를 구하거나, 무한히 많으면 infinity를 출력한다.
난이도

어려움10점 중 8점

유형
정수론, 수학, 조합론, 구현
정답자
아직 제출이 없습니다

문제

요즘은 누구나 머신 러닝, 신경망, 빅데이터에 대해 들어 봤다. 학생 Oleg도 마찬가지로 유행을 따르고 싶어 한다. 그는 Python으로 여러 데이터셋을 열심히 분석하기 시작했다. 코워킹 스페이스에 와서 신경망에 층을 몇 개 더 쌓고, 의자에 기대어 스무디를 마시면서 컴퓨터가 기가바이트 단위의 데이터를 처리하게 하는 건 정말 멋진 일이다! 하지만 오늘은 뭔가 잘못되어서 Oleg가 여러분의 도움을 청한다.

처음에 Oleg에게는 아주 중요한 데이터를 담은 배열 aa가 있었다. 그 데이터는 LL부터 RR까지의 모든 정수이다. 그런 다음 Oleg는 함수 f(a,m)f (a, m)을 작성했는데, 이 함수는 각 정수를 mm으로 나눈 나머지로 바꾼 새 배열을 반환한다. 마지막으로 Oleg가 실수로 a=f(a,Q)a = f (a, Q)라는 줄을 실행해서 원래 배열 aa를 덮어쓰고 말았다! 이 비극의 규모를 파악하기 위해 Oleg는 다음과 같은 양의 정수 XX의 개수를 구하려 한다. 원래 배열 aa의 내용이 무엇이든, 함수 f(a,X)f (a, X)의 결과가 그 불운한 줄을 실행하지 않았을 때와 같아지는 XX이다.

문제가 아직 명확하지 않다면 수학적 서술은 다음과 같다. 구간 [L,R][L, R]의 모든 정수 SS에 대해 ((S mod Q) mod X)=(S mod X).((S \bmod Q) \bmod X) = (S \bmod X)\text{.} 가 성립하는 양의 정수 XX의 개수를 구해야 한다.

입력

한 줄에 공백으로 구분된 세 정수 LL, RR, QQ가 주어진다. (1≤L,R,Q≤10121 \leq L, R, Q \leq 10^{12}, L≤RL \leq R)

출력

조건을 만족하는 양의 정수 XX의 개수가 유한하면 그 개수를 출력한다. 그렇지 않으면 infinity를 출력한다.

예제4

  1. 예제 1

    입력
    1 1 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 5 2
    
    예상 출력
    2
    
  3. 예제 3

    입력
    1 10 10
    
    예상 출력
    4
    
  4. 예제 4

    입력
    1 1 2
    
    예상 출력
    infinity