题意:给 L[n] = (Z * L[n-1] + I) mod M,求L[n]的循环周期。L不一定从初值处开始循环。Z,I,M,L都是不大于四位的整数。
这道题目仔细一观察就可以得出结论,只要后面的数与第一个数或者第二个数(But be careful: the cycle might not begin with the seed!)相同,那么就有了一次循环。
代码:
#include<stdio.h>
int main()
{
int z,i,m,l;
int cas=0;
while(scanf("%d%d%d%d",&z,&i,&m,&l)&&(z||i||m||l))
{
int k,p;
cas++;
int j=1;
i=i%m;
z=z%m;
k=l;
p=l=(z*l+i)%m;
while(k!=l)
{
l=(z*l+i)%m;
if(p==l)break;
j++;
}
printf("Case %d: %d\n",cas,j);
}
return 0;
}