온라인 포커 사이트를 만들려고 한다. 이런 시스템에서 중요한 부품 하나가 난수 생성기다. 빨라야 하고, 충분히 무작위여야 한다. 그래서 다음과 같은 절충안을 생각했다.
길이가 최대 D인 난수를 만들고 싶다. 먼저 10D 이하인 소수 P를 하나 고른다. 다음으로 음이 아닌 정수 A와 B를 고른다. 마지막으로 0 이상 P−1 이하인 정수 시드 S를 고른다.
의사난수 수열은 이렇게 출력한다. 먼저 S를 출력하고, 다음 식으로 S를 갱신한다.
S:=(A×S+B)modP
갱신한 S를 수열의 다음 항으로 출력하고, 같은 식으로 다시 갱신한다. 이 과정을 원하는 만큼 반복한다.
이 난수 생성기가 좋다고 생각하는가? 위와 같은 방식으로 만든 수열에서 연속한 K개의 항을 읽어 그다음 항을 출력하는 프로그램을 작성하라.