输入ZIML,不断另L=(Z*I+L)%M,直到L 的值回到最初输入的值,统计循环次数
#include <stdio.h>
#include <string.h>
const int N = 10010;
int flag[N];
int main()
{
int Z,L,I,M;
int cas = 1;
while(scanf("%d%d%d%d",&Z,&I,&M,&L) != EOF) {
if(Z==0 && L==0 && I==0 && M==0)
break;
memset(flag,0,sizeof(flag)); /////////////////这边的memset不懂
int cut = 0;
int tmp = L;
while( ++cut )
{
tmp = (Z * tmp + I) % M;
flag[tmp]++; ////////////////////
if(flag[tmp]==2) //////////////////为什么到这里可以退出循环
break;
}
printf("Case %d: %d\n",cas++,cut-1);
}
return 0;
}