原题链接:POJ1597
解析:主要难在理解题意,题目问是否分布均匀,就是说随机数是否从0~mod-1都有,其中seed0是可以是任意值,但是我们可以证明seed并不影响结果,由基本模运算可以得到:
seed(i) = (seed(i-1) + step)%mod = (seed(i-2) + step + step)%mod = (seed(0) + i*step)%mod。
错误报告:
- 题意要求输出每组数据后输出一行空行,没注意到
- 在第二十五行输出字母,25行与21行之间只有4个空格
代码示例:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
long long step,mod;
while(~scanf("%lld%lld",&step,&mod)){
long long num[mod];
for(int i = 1;i <= mod;i++)
num[i-1] = ((i%mod)*(step%mod))%mod;
sort(num,num+mod);
bool flag = true;
for(int i = 0;i < mod;i++){
if(i == num[i]) continue;
else{
flag = false;
break;
}
}
printf("%10lld%10lld ",step,mod);
if(flag) puts("Good Choice
");
else puts("Bad Choice
");
}
return 0;
}