首先可以先宣告兩個長度為10000的整數陣列(因為每個數最大不超過9999):
int isTrue[10000] = {0}, len[10000];
而 isTrue 陣列是對應餘數使否有出現過,len 陣列是紀錄每個餘數的出現長度,則只須持續使用 (Z * L + I) % M 即可,一旦判斷出有出現過的餘數,即跳出迴圈,輸出長度:
int count = 0;(註:PseRand() 函式將四個數丟入後,運算 (Z * L + I) % M 後回傳 L 值)
while (!isTrue[L])
{
isTrue[L] = 1, len[L] = count ++;
L = PseRand(Z, I, M, L);
}
printf("%d\n", count - len[L]);
By David.K
p350題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言