2011-04-22 55 views
2

我想弄清楚特定的CMWC伪随机数发生器的周期是什么。免费乘以携带期

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

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

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

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

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

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

回答

0

我误解了什么是需要得到一个完整的周期:

b也必须是p的原根,我不认为这是这里的情况(说实话,我不有数学背景甚至开始了解什么是原始根)。如果有一个完整的期限,则该期限将为a*b^r。据我所知,这是不可能的(或者至少是非常困难的)告诉什么时期会是另外的(坦率地说,这是没有用的,因为实际上需要一整段时间)。

来源:Journal Of Modern Applied Statistical Methods

1

b是原始根时,其顺序是P-1,所以B^K可从1假设的每一个值,以P-1,这取决于k的值。

元素的阶数是b^s = 1(mod p)的最小值。对于phi(p)的每个k除数,phi(p)=(p-(p)/ k)= 1(!=意味着不同) 1)是欧拉的总功能(http://en.wikipedia.org/wiki/Euler%27s_totient_function)。

在您的例子:
- 岛(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具有322570512个除数(http://en.wikipedia.org/wiki/Divisor_function)

随着模幂,所以可以看到, b ^((P-1)/ 3)= 1(mod p) 因此b的顺序与p-1不同。

这是每一个除数ķ最好选择号码一个 b很少除数,则P-1也将有少数除数,这将是很容易计算(PHI(P)/ K)。 b的阶数将为min {phi(p)/ k} = min {(p-1)/ k}。

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

基数b = 2^32没有满周期,但它返回从0到2^32-1的整数。 Base b = 2^32-1不能返回无偏32位整数(它永远不会返回数字2^31-1 = 4294967295)。

+0

+1将数学放在一个地方。我不得不四处搜寻几个小时,把所有这些放在一起。 – djhaskin987 2012-03-26 20:06:55