当前位置: 代码迷 >> 综合 >> uva-350 - Pseudo-Random Numbers
  详细解决方案

uva-350 - Pseudo-Random Numbers

热度:68   发布时间:2023-12-19 11:40:20.0

题意:给 L[n] = (Z * L[n-1] + I) mod M,求L[n]的循环周期。L不一定从初值处开始循环。Z,I,M,L都是不大于四位的整数。

这道题目仔细一观察就可以得出结论,只要后面的数与第一个数或者第二个数(But be careful: the cycle might not begin with the seed!)相同,那么就有了一次循环。

代码:

#include<stdio.h>
int main()
{int z,i,m,l;int cas=0;while(scanf("%d%d%d%d",&z,&i,&m,&l)&&(z||i||m||l)){int k,p;cas++;int j=1;i=i%m;z=z%m;k=l;p=l=(z*l+i)%m;while(k!=l){l=(z*l+i)%m;if(p==l)break;j++;}printf("Case %d: %d\n",cas,j);}return 0;
}