使用乘加进位法生成随机数的 C++ 程序
乘加进位法是马萨里亚和扎曼 (1991) 提出的加法进位生成器的一种变体。这种方法的主要优点是它使用简单的计算机整数运算,可以非常快速地生成具有巨大周期的随机数序列,范围从大约 260 到 22000000。
在 MWC 基础中,b 选择为等于计算机字长,乘数 a 和延迟 r 决定模数 p = abr−1。在此,a 选择为模数是质数,并且乘数具有长周期。
算法
Begin
Declare maximum _sequence _elements, b, r, c[maximum _sequence _elements],
x[maximum _sequence _elements]
Read the variables maximum _sequence _elements, b, r
m = rand() mod b
c[0] = rand() mod m
x[0] = rand() mod b
For I = 1 to maximum_sequence_element, do
x[i] = (m * x[i - r] + c[i - 1]) mod b
c[i] = (m * x[i - r] + c[i - 1]) / b
print the sequence.
Done.
End.示例代码
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int max_Seq_Elements = 7;
int b = 300;
int m = rand() % b;
int r = 1;
int c[max_Seq_Elements];
int x[max_Seq_Elements];
c[0] = rand() % m;
x[0] = rand() % b;
cout << "The random number sequence is: " << x[0];
for (int i = 1; i < max_Seq_Elements; i++) {
x[i] = (m * x[i - r] + c[i - 1]) % b;
c[i] = (m * x[i - r] + c[i - 1]) / b;
cout << " " << x[i];
}
cout << "...";
}输出
The random number sequence is: 177 173 226 221 56 157 84...
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言
C++
C#
MongoDB
MySQL
Javascript
PHP