HDU 1014 Uniform Generator 欧几里得

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014

解题思路:

1. 把题目意思读懂后,明白会输入两个数,然后根据题中的公式产生一系列伪随机数,看这些数是不是能够包含0~MOD-1。如果产生不了就输出“Good Choice”,否则输出“Bad Choice”。

2. 全部假使x从0开始,设STEP为a,MOD为b。如果说a,b存在倍数关系,即假设最小存在2倍关系,那么就会有b=2a。x初始为0,第一步之后为a,第二步之后为0,之后a、0交替出现。周期为2,那么始终都不会产生0~b-1的全部数。以此类推,只要存在几倍关系,周期就为几。可见,两数存在倍数关系就不会得到全部数列。则2a与3a也不会有结果。所以说,当两数存在公约数,即两数不互质,就不会产生一系列数。

3. 如果两数互质,举一个最简单的例子。令a=b+1。则x初始为0,第一步之后为1,第二步之后为2,第三步之后为3,则可以产生一系列伪随机数满足题中要求。

4. 编写代码时注意最后输出,C++输出默认右对齐。

源代码:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int t,n,m,a,b;
 5     while(scanf("%d%d",&m,&n)!=EOF)
 6     {
 7         a=m;
 8         b=n;
 9         if(m<n)
10         {
11             t=m;
12             m=n;
13             n=t;
14         }
15         if(n==0)
16         {
17             n=m;
18         }
19         else
20         {
21             while(m%n!=0)
22             {
23                 t=m%n;
24                 m=n;
25                 n=t;
26             }
27         }
28         if(t==1)
29             printf("%10d%10d    Good Choice\n\n",a,b);
30         else
31             printf("%10d%10d    Bad Choice\n\n",a,b);
32 
33     }
34     return 0;
35 }
View Code

posted @ 2017-11-11 22:59  lemonsbiscuit  阅读(202)  评论(0编辑  收藏  举报