Uva - 350 Pseudo-Random Numbers
题目大意:给出 z、l、i、m四个数按 l =(z * l + i) % m 给出下一个数。l的数值会循环出现,求循环的长度。
解题思路:按照公式来。
注意点:But be careful: the cycle might not begin with the seed! 这句话一开始没注意看,然后就悲剧了。一开始给出的l不一定是循环的开始。
#include<iostream>
#include<cstdio>
using namespace std;
int main() {
int z, l,l2 ,i, m, tem, len, n=0;
while(scanf("%d%d%d%d",&z,&i,&m,&l),z||i||m||l) {
tem = (z*l + i)%m; len = 1;l2 = tem;
n++;
while( tem != l ) {
tem = (z*tem + i)%m;
if( tem == l2) break;
len++;
}
cout << "Case "<<n<<": "<<len<<endl;
}
return 0;
}