跟前一题一样,睡醒中午觉就是爽,一看就会做。 其实我当时考虑到效率还打算搞个hash函数,可是。。。其实也是打了,一一对应的,哈啊 #include <stdio.h> #include <string.h> int z, i, m, l; bool isVis[10000]; int data[10000]; int count = 0; int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int main() { //#define TEST #ifdef TEST freopen("input.txt", "r", stdin); #endif int k = 1; while(true) { scanf("%d%d%d%d", &z, &i, &m, &l); if(z == 0 && i == 0 && m == 0 && l == 0) break; memset(isVis, false, sizeof(isVis)); isVis[l] = true; count = 1; data[0] = l; while(true) { l = (z * l + i) % m; if(isVis[l]) break; isVis[l] = true; data[count++] = l; } int i = 0; for(; ; i++) { if(data[i] == l) break; } printf("Case %d: %d/n", k++, count - i); } return 0; }