當初在出題時並未考慮到 C/C++ 以外的語言,作為補充說明及參考,於此附註 ZJ server 上 C/C++ rand 的實作方式。
import collections, time class c576: r = collections.deque() @staticmethod def rand(): r = c576.r r.append((r[0] + r[28]) % 4294967296) r.popleft() return r[-1] // 2 @staticmethod def srand(seed): r = c576.r r.clear() r.append(seed) for i in range(1, 31): r.append(16807 * r[i - 1] % 2147483647) r.rotate(-3) for i in range(34, 344): r.append((r[0] + r[28]) % 4294967296) r.popleft() @staticmethod def Init(): c576.srand(int(time.time()) // 60) c576.Init()