|
1
9
琐碎的解决方案。制作液晶显示器
输出的数字将不会有一个特别简单的模式mod 2,3,5等,直到任何素数小于您使用的素数。
我是通过
http://primes.utm.edu/curios/includes/primetest.php
在我得到一个素数之前输入数字。我有点幸运。可能性
编辑: |
|
|
2
3
编辑:
初始LCG伪码:
包括交换的LCG伪码:
|
|
3
2
另一个简单、高效、理解力强的PRNG是 Linear Feedback Shift Register . 按照本文中的步骤很容易实现完整周期。
你可以考虑一些为 Format-Preserving Encryption . 我相信这些可以很容易地适应产生排列。 |
|
|
4
2
仅仅因为你不需要密码强度,这并不意味着你不能从密码学中借鉴一些想法。。。比如Feistel网络(Luby Rackoff建筑)。 Wikipedia picture 很清楚。 如果你选择一个简单而快速的F——它甚至不需要保证唯一的输出——那么你只需要把一个序列(0,1,2,…,2^n-1)输入到Feistel网络的几轮中。由于构造是可逆的,这保证了输出永远不会重复。 32位的示例代码:
你可以随意修改F()的定义、回合数等,以适应你的口味。无论您在那里使用什么,“全周期”属性都有保证。换句话说,如果你有循环
这不完全符合您所述的要求,因为
很容易适应不同的比特数,尽管它要求R是2的幂。 |
|
|
5
2
置换同余生成器似乎具有您所寻找的所有特性:
|
|
|
6
1
在下面的链接中,您可以找到组合LCG的示例。(包括文档和源代码)(注意:算法是开放的,但源代码的许可证不是开放的(即没有派生代码) 您甚至可以尝试这个7阶段的XORshift RNG示例: |