#4749. 均匀生成器
均匀生成器
题目描述
计算机模拟通常需要随机数。生成伪随机数的一种方法是通过以下形式的函数:
seed(x+1) = [ seed(x) + STEP ] % MOD
其中 "%" 是取模运算符。
这种函数将生成介于 0 和 MOD-1 之间的伪随机数(seed)。这种形式的函数的一个问题是,它们会不断重复相同的模式。为了尽量减少这种影响,仔细选择 STEP 和 MOD 的值可以实现 0 到 MOD-1 之间所有值的均匀分布。
例如,如果 STEP=3 且 MOD=5,该函数将生成 0、3、1、4、2 的伪随机数序列,然后重复。在这个例子中,每次函数迭代 MOD 次,0 到 MOD-1 之间的所有数字都将被生成。请注意,由于该函数的性质是每次 seed(x) 出现时都会生成相同的 seed(x+1),这意味着如果一个函数能够生成 0 到 MOD-1 之间的所有数字,那么它将在每次 MOD 次迭代中均匀地生成伪随机数。
如果 STEP = 15 且 MOD = 20,该函数将生成 0、15、10、5 的序列(或者如果初始 seed 不是 0,就会生成其他重复的序列)。这是一个 STEP 和 MOD 的选择不佳的例子,因为没有任何初始 seed 能够生成 0 到 MOD-1 之间的所有数字。
你的程序将确定 STEP 和 MOD 的选择是否能够生成伪随机数的均匀分布。
输入
第一行有一个正整数T(2<= T <= 100),表示有T组测试;
每行输入包含一对整数,分别表示 STEP 和 MOD 的值(1<=STEP,MOD<=100000)。
输出
对于每行输入,你的程序应在第 1 列至第 10 列右对齐打印 STEP 值,在第 11 列至第 20 列右对齐打印 MOD 值,并在第 25 列开始左对齐打印“Good Choice”或“Bad Choice”。当选择的 STEP 和 MOD 能够在生成 MOD 个数字时生成 0 到 MOD-1 之间的所有数字时,应打印“Good Choice”消息。否则,你的程序应打印“Bad Choice”消息。在每个输出测试集之后,你的程序应正好打印一个空行。
输入示例
3
3 5
15 20
63923 99999
输出示例
3 5 Good Choice
15 20 Bad Choice
63923 99999 Good Choice
相关
在以下作业中: