发布于 2021-12-21 00:24:45
你的问题首先是数学问题,然后是编程问题。
我会考虑简单的:M = (M + N) % (2^32)来获得M的"next“值。
其中N是一个大的,正的,奇数的整数。
M是要使用的下一个数字。(它可以用任何你喜欢的东西初始化)。
它将生成2^32个不同的数字,然后重复。
2^32可以是2的任意幂。实际上,关键是2^32和N没有共同的因素(除了1)。
小心%;您使用的语言可能使用32位有符号数字。或者64位。在今天的大多数语言中,2^16将起作用。但它限制了你65536的数值。
% 2^P也可以使用位掩蔽来完成。
Rand()只在2^30值之后重复,但是RAND() * 99999很可能在前99999次迭代中有一些dups。有一些随机数发生器可以持续更长的时间。
1M值约为20位。所以2^20起作用了。或者用& 0xFFFFF掩蔽。
如果您也转换为十六进制,那么所有的代码可以是5个字符。TO_BASE64()将其压缩为4个字符。
https://stackoverflow.com/questions/70427846
复制相似问题