UVa 350 - Pseudo-Random Numbers

题目:随机数产生器 L = (L*Z+I)%M。

分析:简单题、模拟。很多计算机上的随机数就是利用循环节等于M的四元组构造出来了,而L通常取当前时间。

注意:初始的L不一定是循环节中的元素。

说明:之前的代码忘记把 printf("%d ",L);注释掉了,感谢MyCodeBattle童鞋的指出(⊙_⊙)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int used[ 10001 ];

int main()
{
	int Z,I,M,L,C = 1;
	while ( scanf("%d%d%d%d",&Z,&I,&M,&L) && M ) {
		Z %= M,I %= M,L %= M;
		memset( used, 0, sizeof(used) );
		int count = 0;
		L = (Z*L+I)%M;
		while ( !used[L] ) {
			count ++;
			used[L] = 1;
			L = (Z*L+I)%M;
			//printf("%d ",L);这里之前忘记注释了。。。
		}
		printf("Case %d: %d\n",C ++,count);
	}
	return 0;
}

你可能感兴趣的:(UVa 350 - Pseudo-Random Numbers)