c++ 电脑里生成的随机数其实都是伪随机数,也就是说表面看上去没有顾虑,但其实只是数字背后的规律非常负责罢了。今天,我们来介绍一种生成伪随机数的算法:线性同余。 x[i]=(x[i-1]*k)%m 举例如下: 随机种子x[0]=2 乘法系数k=3 取模数字m=7 可以依次生成以下“伪随机”数组x: x[0]=2 x[1]=(x[0]*k)%m=(2*3)%7=6 x[2]=(x[1]*k)%m=(6*3)%7=4 x[3]=(x[2]*k)%m=(4*3)%7=5 x[4]=(x[3]*k)%m=(5*3)%7=1 x[5]=(x[4]*k)%m=(1*3)%7=3 x[6]=(x[5]*k)%m=(3*3)%7=2 ... 请计算这个“伪随机”数组x的前m项。
时间: 2024-03-26 18:41:25 浏览: 80
根据线性同余法生成伪随机数的公式 x[i] = (x[i-1] * k) % m,其中 x[0] 是随机种子。我们可以使用循环来依次计算数组 x 的每一项:
```c++
#include <iostream>
using namespace std;
int main() {
int x[100], k, m;
cout << "请输入随机种子 x[0]:";
cin >> x[0];
cout << "请输入乘法系数 k 和取模数字 m:";
cin >> k >> m;
// 依次计算 x[1] 到 x[m-1]
for (int i = 1; i < m; i++) {
x[i] = (x[i-1] * k) % m;
}
// 输出数组 x 的前 m 项
for (int i = 0; i < m; i++) {
cout << "x[" << i << "] = " << x[i] << endl;
}
return 0;
}
```
程序中使用数组 x 存储生成的伪随机数组,使用循环计算 x 的每一项,最后输出 x 的前 m 项。例如,当随机种子 x[0] 为 2,乘法系数 k 为 3,取模数字 m 为 7 时,生成的伪随机数组 x 的前 7 项分别为:
```
x[0] = 2
x[1] = 6
x[2] = 4
x[3] = 5
x[4] = 1
x[5] = 3
x[6] = 2
```
这些数字看起来是随机的,但实际上它们都是按照一定规律计算出来的。如果使用不同的随机种子、乘法系数和取模数字,就可以生成不同的伪随机数序列。
阅读全文