(HDU)1014 --Uniform Generator(统一随机数生成)

这个题目不难,关键是看懂英文:(判断两个数是否互质,而且注意输出的格式)

描述
计算机模拟通常需要随机数。生成伪随机数的一种方式是通过一定形式的函数:

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之间的所有数字。注意,由于每次产生种子(x)时生成相同种子(x + 1)的函数的性质,意味着如果函数将生成在0和MOD-1之间的所有数字,则它将均匀地生成伪随机数与每个MOD迭代。

如果STEP = 15和MOD = 20,该函数生成系列0,15,10,5(或任何其他重复系列,如果初始种子不是0)。这是一个很差的STEP和MOD选择,因为没有初始种子将生成从0和MOD-1的所有数字。

您的程序将确定STEP和MOD的选择是否将生成伪随机数的均匀分布。


输入
每一行输入将按顺序包含一对用于STEP和MOD的整数(1 <= STEP,MOD <= 100000)。


输出
对于每一行输入,您的程序应在第1列至第10列右对齐输出STEP值,第11列至第20列右对齐的MOD值,以及从第25列左对齐输出“Good Choice”或“Bad Choice” 。当生成MOD号时,选择STEP和MOD将生成0和MOD-1之间的所有数字时,应输出“Good Choice”信息。否则,您的程序应输出信息“Bad Choice”。在每个输出测试集之后,程序应该输出一个空白行。


样例输入
3 5
15 20
63923 99999


样例输出
            3      5  Good Choice

          15   20   Bad Choice

     63923 99999   Good Choice
问题
 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int gcd(int a, int b)
 7 {
 8     return a%b?gcd(b,a%b):b;
 9 }
10 
11 int main ()
12 {
13     char tab[2][15] = {"Bad Choice", "Good Choice"} ;
14     int a, b ;
15     while (~scanf ("%d%d", &a, &b))
16     {
17         printf ("%10d%10d    %s

", a, b, tab[gcd(a,b)==1]) ;
18     }
19     return 0 ;
20 }
精简代码
原文地址:https://www.cnblogs.com/ACDoge/p/6123910.html