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

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

무작위 간격

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

요약
선형 합동 생성기가 만들어내는 서로 다른 값들을 정렬했을 때 이웃한 값 사이의 최대 간격을 구한다.
난이도

보통10점 중 5점

유형
시뮬레이션, 해시맵, 배열, 정렬
정답자
아직 제출이 없습니다

문제

의사난수 생성기(RNG)는 통계 계산에서 널리 쓰인다. 그중 가장 단순하고 흔한 것이 선형 합동 생성기로, 바로 앞 값으로부터 nn번째 수 RnR_n을 다음과 같이 만든다.

Rn=(a⋅Rn−1+c) mod mR_n = (a \cdot R_{n-1} + c) \bmod m

여기서 aa, cc, mm은 고정된 상수이고 R0R_0은 시작 씨앗값이다. 예를 들어 a=15a = 15, c=7c = 7, m=100m = 100, R0=1R_0 = 1이면 수열은 1,22,37,62,37,62,…1, 22, 37, 62, 37, 62, \dots 이다.

이런 생성기는 빠르고, 상수를 잘 고르면 좋은 난수열을 만든다. 품질을 재는 한 가지 척도는 수열이 만들어 내는 값들 사이의 가장 큰 간격이다. 수열에 등장하는 서로 다른 값들의 집합을 생각하고, 그중 다음 두 조건을 만족하는 값 Ri<RjR_i < R_j를 찾아라.

  1. Ri<Rk<RjR_i < R_k < R_j인 값 RkR_k가 수열에 존재하지 않는다(즉 RiR_i와 RjR_j는 서로 다른 값들 중에서 이웃한다).
  2. 차이 Rj−RiR_j - R_i가 최대이다.

이 최대 차이를 출력하라. 수열이 만들어 내는 서로 다른 값이 하나뿐이면 00을 출력한다.

입력

네 정수 aa, cc, mm, R0R_0이 주어진다.

출력

위에서 설명한 최대 차이를 정수 하나로 출력한다.

제한

  • 0≤a,c,R0≤1070 \le a, c, R_0 \le 10^7
  • 1≤m≤160000001 \le m \le 16000000
  • a⋅m+c<232a \cdot m + c < 2^{32}

예제2

  1. 예제 1

    입력
    15 7 100 1
    
    예상 출력
    25
    
  2. 예제 2

    입력
    2 0 127 5
    
    예상 출력
    26