zrq495
www.zrq495.com

L=(Z*L + I)%M,求L的循环周期。 

注意L不一定是在初始位置开始循环。

哈希  数组标记出现过的L,判断即可。

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     long long a[10001], l, z, i, m, cnt, cas=1;
10     while(cin >> z >> i >> m >> l, z||i||m||l)
11     {
12         memset(a, 0, sizeof(a));
13         cnt=0;
14         while(1)
15         {
16             l=(z*l+i)%m;
17             if (a[l])
18                 break;
19             a[l]=1;
20             cnt++;
21         }
22         printf("Case %lld: %lld\n", cas++, cnt);
23     }
24     return 0;
25 }
posted on 2012-08-11 21:17  zrq495  阅读(254)  评论(0编辑  收藏  举报