#UVa:350-Pseudo-Random Numbers

利用陣列紀錄每次抵達某數字是在第幾次運算的時候,到最後發現重複就可以停下來算出循環的長度。

C++(0.019)

/*******************************************************/
/* UVa 350 Pseudo-Random Numbers                       */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2015/01/15                                 */
/*******************************************************/
#include <iostream>
#include <cstdio>
using namespace std;

int main(){
  int caseNumber = 1;
  int Z, I, M, L;
  while( scanf("%d%d%d%d", &Z, &I, &M, &L) != EOF &&
         ( Z != 0 || I != 0 || M != 0 || L != 0 ) ){
    int isVisited[10000] = {0};
    int length = 0;
    while( isVisited[L] == 0 ){
      ++length;
      isVisited[L] = length;
      L = (Z * L + I) % M;
    }

    printf("Case %d: %d\n", caseNumber++, length - isVisited[L] + 1);
  }
  return 0;
}

發表迴響