题意:给出四个数Z,I,M,L,L=(Z*L+I)%M,直到得到一个原来出现过的L,该运算便开始循环,求出L的循环周期。
我的思路:用一个数组保存L,每次遍历查找,为了增加效率,也可用哈希表查找
#include <iostream>
#include <cmath>
using namespace std;
int l[1000000];
int main()
{
int t,f,z,i,m,Case=0,flag;
while(cin>>z>>i>>m>>l[0])
{
Case++;
if(!z&&!i&&!m&&!l[0])
break;
t=0;
flag=0;
while(flag==0)
{
t++;
l[t] = (z * l[t-1] + i) % m;
for(int k=0;k<t;k++)
if(l[k]==l[t])
{
f=k;
flag=1;
break;
}
}
cout<<"Case "<<Case<<": "<<t-f<<endl;
}
return 0;
}