思路:存在循环节,注意开始一部分不一定是循环的
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <vector> using namespace std; long long z,i,mod,l; long long num[10000000]; long long fun(long long x) { return (z*x+i)%mod; } int main() { int t=0; while(scanf("%lld%lld%lld%lld",&z,&i,&mod,&l)!=EOF) { if(z+i+mod+l==0) break; int tnt=0; num[0]=l; int x; while(1) { int tag=1; for(x=tnt-1;x>0;x--) { if(num[x]==num[tnt]) { tag=0; break; } } if(tag==0) break; l=fun(l); //cout<<l<<endl; num[++tnt]=l; } printf("Case %d: %d ",++t,tnt-x); } return 0; }