传送门UVa 350 - Pseudo-Random Numbers
参考了一下别人的方法, 利用数组判断某一数字是否重复出现. 那个观察出循环的开头不是第一个数就是第二个数我实在是观察不出来啊....
#include <cstdio>
#include <cstring>
using namespace std;
int num[100000] = {0};
int main()
{
//freopen("input.txt", "r", stdin);
int z, i, m, l, cnt, count = 1;
while (scanf("%d%d%d%d", &z, &i, &m, &l))
{
if (z == 0 && i == 0 && m == 0 && l == 0)
break;
cnt = 0;
z %= m;
i %= m;
l = (z * l + i) % m;
while (!num[l])
{
num[l] = 1;
l = (z * l + i) % m;
cnt++;
}
printf("Case %d: %d\n", count++, cnt);
memset(num, 0, sizeof(num));
}
return 0;
}