题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1278
没有什么算法之类的,直接暴力即可。。
#include<stdio.h> #include<string.h> bool hash[10005]; int INDEX[10005]; int main() { int Z,I,M,L,cnt=1,inx; while(scanf("%d%d%d%d",&Z,&I,&M,&L)!=EOF) { if(Z==0&&I==0&&M==0&&L==0) break; memset(hash,0,sizeof(hash)); memset(INDEX,0,sizeof(INDEX)); inx=0; hash[L]=true; while(1) { L=(L*Z+I)%M; if(!hash[L]) { inx++; hash[L]=true; INDEX[L]=inx; } else { inx++; break; } } printf("Case %d: %d/n",cnt++,inx-INDEX[L]); } return 0; }