题意:根据这个式子来递推求得每个随机数x,step和mod给定,seed(0)=0。如果推出来的序列是mod个不重复的数字(0~mod-1)则打印good,否则bad(因为不能产生所有的数)。

思路:

  用一个数组记录所产生过的数,当出现数字已记录过时,判断是否个数为mod个。若是就返回good。

 #include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
bool ans[N]; int main()
{
//freopen("input.txt", "r", stdin);
int a, b;
while(~scanf("%d%d",&a,&b))
{
memset(ans,,sizeof(ans));
ans[]=;
int cur=, flag=;
for(int i=; i<=b; i++)
{
cur=(cur+a)%b;
if(ans[cur]) //鸽笼原理
{
printf("%10d%10d Bad Choice\n\n",a,b);
flag=;
break;
}
else ans[cur]=;
}
if(flag) printf("%10d%10d Good Choice\n\n",a,b);
}
return ;
}

AC代码

05-11 10:57
查看更多