In short, we need a*b^r+1 to be prime, and to have b as a primitive root.
| a | b | r | period (roughly) |
|---|---|---|---|
| 222 | 28-1 | 1 | 215.8 |
| 238 | 28-1 | 2 | 223.9 |
| 254 | 28-1 | 4 | 240 |
| 166 | 28-1 | 8 | 271.3 |
| 106 | 28-1 | 16 | 2134.6 |
| 65518 | 216-1 | 1 | 232 |
| 65474 | 216-1 | 2 | 248 |
| 65398 | 216-1 | 4 | 280 |
| 65486 | 216-1 | 8 | 2144 |
| 65234 | 216-1 | 16 | 2272 |
| 65518 | 216-1 | 32 | 2528 |
| 62826 | 216-1 | 64 | 21039.9 |
| 62378 | 216-1 | 128 | 22063.9 |
| 55962 | 216-1 | 256 | 24111.8 |
| 4294967274 | 232-1 | 1 | 264 |
| 4294966926 | 232-1 | 2 | 296 |
| 4294967030 | 232-1 | 4 | 2160 |
| 4294967054 | 232-1 | 8 | 2288 |
| 4294966302 | 232-1 | 16 | 2544 |
| 4294965894 | 232-1 | 32 | 21056 |
| 4294966718 | 232-1 | 64 | 22080 |
| 4294961686 | 232-1 | 128 | 24128 |
| 4294944438 | 232-1 | 256 | 28224 |
for something different, here's a Python generator.
def cmwc_r1(x=0,c=0,a=65518,b=2**16-1):
while True:
t=a*x+c
c=t/b
x=(b-1)-(t%b)
yield x
rng=cmwc_r1(x=123,c=456)
for n in rng:
print '%5d' % (n)
No comments:
Post a Comment