免费乘送和携带期

时间:2011-04-22 22:22:44

标签: random computer-science

我试图找出特定CMWC伪随机数生成器的周期。

维基百科页面提供了标准MWC和CMWC的不同参数周期的一些示例,但并没有真正回答这是如何计算的。

对于给定的乘数,r个种子数和基数b,是否有一种简单的方法来计算它?

例如,假设我有以下参数(对于CMWC):

b=2^32-1
a=4294966362
r=32

我已经确认p=a*b^r+1是素数。

编辑:oops,复制了错误的值。修正了它,所以p现在应该是素数。

2 个答案:

答案 0 :(得分:1)

b是一个原始根,当它的顺序是p-1时,所以b ^ k可以假定从1到p-1的每个值,具体取决于k的值。

元素的顺序是最小s,其中b ^ s = 1(mod p)。 b是原始根,只有当b ^(phi(p)/ k)!= 1(!=表示不同)时,每个k除数为phi(p),并且phi(p)=(p-1) )是Euler的函数(http://en.wikipedia.org/wiki/Euler%27s_totient_function)。

在你的例子中:
- phi(p)= a * b ^ r = p - 1.
- 除数为{1,2,3,31,23091217,4294966362}。
- b的除数为{1,3,5,17,257,65537,4294967295}。

所以,(p-1)= 2 *(3 ^ 33)*(5 ^ 32)*(17 ^ 32)* 31 *(257 ^ 32)*(65537 ^ 32)* 23091217。
p-1有322,570,512个除数(http://en.wikipedia.org/wiki/Divisor_function)

使用模幂运算,可以看到它 b ^((p-1)/ 3)= 1(mod p) 所以b的顺序与p-1不同。

最好用几个除数选择数字 a b ,然后p-1也会有很少的除数,并且它很容易计算(phi(p )/ k)对于每个除数k。 b的顺序为min {phi(p)/ k} = min {(p-1)/ k}。

在Marsaglia的文章“关于Pi和其他小数扩展的随机性”(http://interstat.statjournals.net/YEAR/2005/articles/0510005.pdf)中,有一些a,b和r的值。不完整的时期也是有用的(见文章)。

Base b = 2 ^ 32没有完整的句点,但它返回0到2 ^ 32-1之间的整数。基数b = 2 ^ 32-1不能返回无偏32位整数(它永远不会返回数字2 ^ 31-1 = 4294967295)。

答案 1 :(得分:0)

我误解了获得一个完整时期所需要的东西:

b也必须是p的原始根,我不认为这是这种情况(说实话,我没有数学背景,甚至没有开始理解什么原始根是)。如果有一个完整的期间,则期间为a*b^r。据我所知,不可能(或者至少很难)告诉那个时期会是什么时候(坦率地说,它没有用,因为在实践中需要一段时间)。

来源:Journal Of Modern Applied Statistical Methods