链接https://acs.jxnu.edu.cn/problem/HDU1014
题目:
描述:
Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form
seed(x+1) = [seed(x) + STEP] % MOD
where '%' is the modulus operator.
Such a function will generate pseudo-random numbers (seed) between 0 and MOD-1. One problem with functions of this form is that they will always generate the same pattern over and over. In order to minimize this effect, selecting the STEP and MOD values carefully can result in a uniform distribution of all values between (and including) 0 and MOD-1.
For example, if STEP = 3 and MOD = 5, the function will generate the series of pseudo-random numbers 0, 3, 1, 4, 2 in a repeating cycle. In this example, all of the numbers between and including 0 and MOD-1 will be generated every MOD iterations of the function. Note that by the nature of the function to generate the same seed(x+1) every time seed(x) occurs means that if a function will generate all the numbers between 0 and MOD-1, it will generate pseudo-random numbers uniformly with every MOD iterations.
If STEP = 15 and MOD = 20, the function generates the series 0, 15, 10, 5 (or any other repeating series if the initial seed is other than 0). This is a poor selection of STEP and MOD because no initial seed will generate all of the numbers from 0 and MOD-1.
Your program will determine if choices of STEP and MOD will generate a uniform distribution of pseudo-random numbers.输入:
Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).
输出:
For each line of input, your program should print the STEP value right- justified in columns 1 through 10, the MOD value right-justified in columns 11 through 20 and either "Good Choice" or "Bad Choice" left-justified starting in column 25. The "Good Choice" message should be printed when the selection of STEP and MOD will generate all the numbers between and including 0 and MOD-1 when MOD numbers are generated. Otherwise, your program should print the message "Bad Choice". After each output test set, your program should print exactly one blank line.
翻译如下
描述:
电脑模拟经常会用到随机数。通过表单函数来生成伪随机数是一种方法。该函数如下
seed(x+1) = [seed(x) + STEP] % MOD
其中,'%'表示取模运算。
这一个函数生成的伪随机数(种子)的取值范围为0到MOD-1。这个函数存在一个问题,就是这种方法总是会生成相同的情况。为了减小出现这种情况的出现,仔细选择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的序列(如果最初的种子不为0,那么也可能生成其他重复的序列)。这会是一个坏的情况因为没有一个初始种子可以生成0到MOD-1之间的所有数字。
你的程序会决定STEP和MOD能否生成均匀分布的伪随机数。
输入:
每组样例包含一对有序整数STEP和MOD(1 <= STEP, MOD <= 100000)。
输出:
对于每组输出,你的程序要在第1到第10列输出STEP的值(右对齐),在11到20列输出MOD的值(右对齐),以及在第25列输出"Good Choice" 或者"Bad Choice"(左对齐)。"Good Choice"表示输入的STEP和MOD可以生成0到MOD-1之间的所有数字,反之则输出"Bad Choice"。每组样例输出后需要输出一个空行用于分割相邻的样例。