1、简单的模拟,注意本题中给出的第一个数不一定是循环的开始,比如1234567567567567567567……如果只是判断与第一个是否相等的话,就会进入死循环。
2、注意for循环是在while内的,所以一次break不够,需要两次break才能跳出循环。
#include <stdio.h>
int z,i,m,l,j,num,count=0,a[10010]={0};
int main(void)
{
while(scanf("%d%d%d%d",&z,&i,&m,&l)==4)
{
int length=0,temp,first;
count++;
if(z==0&&i==0&&m==0&&l==0) break;
num=0;
first=l;
while(1)
{
a[num++]=l;
temp=(z*l+i)%m;
for(j=0;j<num;j++)
if(num-1!=j&&a[j]==a[num-1]) break;
if(j<num) break;
l=temp;
}
printf("Case %d: %d\n",count,num-1-j);
memset(a,0,sizeof(a));
}
return 0;
}