水题,直接暴力即可。
由于ZOJ无节操地隐去数据范围,苯渣把vis表的范围设在了100万- -
下面是代码:
//User:Lostwinder
//Time:0 ms
//Memory:4076 KBytes
#include "stdio.h"
#include "string.h"
const int MAXN=1000054;
int vis[MAXN];
int main(){
int i,j,k,l,Z,L,I,M;
k=1;
while(1){
scanf("%d%d%d%d",&Z,&I,&M,&L);
if(!Z||!I||!M||!L)break;
i=1;
memset(vis,-1,sizeof(vis));
while(i<MAXN){
//printf("i=%d.\n",i);
if(vis[L]!=-1){
printf("Case %d: %d\n",k,i-vis[L]);
break;
}
vis[L]=i;
L=(Z*L+I)%M;
i++;
}
k++;
}
return 0;
}