#include <iostream> using namespace std; int main() { int z,i,m,l; int iCnt = 0; // freopen("1.txt","r",stdin); while (scanf("%d %d %d %d", &z,&i,&m,&l) != EOF) { if (z == 0 && i == 0 && m == 0 && l == 0) break; iCnt++; z = z % m,l = l % m,i = i % m; int ilen = 1,temp = (z * l + i) % m; bool *p = new bool[m+1]; memset(p,0,m+1); p[temp] = true; while (temp != l) { temp = (z * temp + i) % m; if (p[temp]) break; else p[temp] = true; ilen++; } printf("Case %d: %d/n",iCnt,ilen); delete [] p; } return 0; } //别人的算法没看懂,比我的快很多 #include<cstdio> using namespace std; int z,i,m,l,temp,count,next; int main(){ int j=0; while(scanf("%d%d%d%d",&z,&i,&m,&l)!=EOF){ if(z==0&&i==0&&m==0&&l==0){break;} j++; temp=l; count=1; z=z%m; i=i%m; next=temp=(z*l+i)%m;; while(l!=temp){ temp=(z*temp+i)%m; if(temp==next){break;} count++; } printf("Case %d: %d/n",j,count); } return 0; } ,