P13403 [GCJ 2010 #3] De-RNG-ed
题目描述
我想制作一个在线扑克网站。这样一个系统中非常重要的组件就是随机数生成器。它需要足够快且足够随机。以下是我想出的一个折中方案。我需要生成长度最多为 $D$ 的随机数。我的计划是选择一个素数 $P \leq 10^D$。我还会选择非负整数 $A$ 和 $B$。最后,我会选择一个整数种子 $S$,满足 $0 \leq S \leq P-1$。
为了输出我的伪随机数序列,我会首先输出 $S$,然后用如下公式计算 $S$ 的新值:
$$S := (A\times S + B) \bmod P$$
然后我会输出新的 $S$ 作为序列中的下一个数,并用同样的公式继续更新 $S$。我可以重复这个过程任意多次。
你认为这是一个好的随机数生成器吗?你能写一个程序,给定由我的随机数生成器生成的连续 $K$ 个元素,输出该序列的下一个元素吗?
输入格式
输入的第一行包含测试用例数 $T$。接下来有 $T$ 组测试数据。每组测试数据的第一行包含 $D$ 和 $K$。下一行包含由上述随机数生成器生成的连续 $K$ 个元素。
输出格式
对于每个测试用例,输出一行,格式为 "Case #$x$: $y$",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是序列的下一个数。如果答案不唯一,则输出字符串 "I don't know."。
说明/提示
**数据范围**
- $1 \leq T \leq 100$。
- $1 \leq K \leq 10$。
- 这 $K$ 个整数是由上述类型的随机数生成器生成的连续元素。
**小数据范围(4 分,测试点 1 - 可见)**
- $1 \leq D \leq 4$。
**大数据范围(10 分,测试点 2 - 隐藏)**
- $1 \leq D \leq 6$。
由 ChatGPT 4.1 翻译