UVA 350
本题类似于做一个随机数产生器,利用l=(z*l+i)%m产生出l,然后保留l,直到l再次出现,循环中要特别注意But be careful:the cycle might not begin with the seed!,就是第一个l不保存
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int j,len; 3 long long ans[100000]; 4 int ran(int l) 5 { 6 int i; 7 for(i=0;i<j;i++) 8 if(l==ans[i]) 9 { 10 return 0; 11 break; 12 } 13 return 1; 14 }//判断l是否已经出现过 15 int main() 16 { 17 long long l,i,z,m; 18 int ca=1; 19 while(scanf("%lld%lld%lld%lld",&z,&i,&m,&l),z||i||m||l) 20 { 21 j=0; 22 l=(z*l+i)%m;//这里是因为But be careful:the cycle might not begin with the seed! 23 while(ran(l)) 24 { 25 ans[j]=l; 26 j++; 27 l=(z*l+i)%m; 28 } 29 printf("Case %d: %d\n",ca++,j);//ca用于case计数 30 } 31 return 0; 32 }