伪随机数生成算法c++
时间: 2023-07-26 19:07:38 浏览: 53
C++的标准库中已经提供了伪随机数生成器,包括 <random> 头文件和相应的类和函数。下面是一个简单的伪随机数生成器示例:
```c++
#include <iostream>
#include <random>
int main()
{
// 创建一个随机数生成器对象
std::mt19937 generator(std::random_device{}());
// 指定随机数范围
std::uniform_int_distribution<int> distribution(1, 100);
// 生成随机数
for (int i = 0; i < 10; ++i) {
std::cout << distribution(generator) << std::endl;
}
return 0;
}
```
首先创建一个 `std::mt19937` 类型的对象作为随机数生成器,使用 `std::random_device` 作为种子。然后创建一个 `std::uniform_int_distribution<int>` 类型的对象,指定了随机数的范围为 1 到 100。最后调用 `distribution(generator)` 生成随机数。
相关问题
给出生成伪随机数的c++算法
C++ 中生成伪随机数的算法主要依赖于 `rand()` 函数和 `srand()` 函数。
`rand()` 函数用于生成一个在 `0` 到 `RAND_MAX` 之间的伪随机整数。`RAND_MAX` 是一个宏定义,表示伪随机数的最大值,通常为 `32767`。
`srand()` 函数用于设置随机数生成器的种子,一般可以将当前时间作为种子,以保证每次运行程序生成的随机数不同。
下面是一个简单的 C++ 代码示例:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
// 设置种子
srand(time(0));
// 生成 10 个随机数
for (int i = 0; i < 10; i++) {
int num = rand();
cout << num << endl;
}
return 0;
}
```
这个程序将会输出 10 个随机数,每次运行程序输出的结果都不同,因为每次运行程序时种子都不同。
c++的随机算法
C++标准库提供了伪随机数生成器(Pseudo-random number generator,PRNG)和真随机数生成器(True random number generator,TRNG)两种随机数生成算法。
1. 基于随机数引擎的伪随机数生成算法
C++11引入了随机数库,其中就包括了一些随机数引擎和分布模板。随机数引擎是一个计算机程序,用于生成伪随机数。C++标准库提供了多个随机数引擎,包括:
- linear_congruential_engine
- mersenne_twister_engine
- subtract_with_carry_engine
- knuth_b_engine
- ranlux24_base_engine
- ranlux48_base_engine
- ranlux24_engine
- ranlux48_engine
- shuffle_order_engine
这些随机数引擎可以通过不同的方式生成随机数,比如线性同余法、梅森旋转算法、加减混合法等等。
示例代码:
```c++
#include <iostream>
#include <random>
int main()
{
std::random_device rd; // 用于获取真随机数种子
std::mt19937 gen(rd()); // 使用梅森旋转算法的伪随机数引擎
std::uniform_int_distribution<> dis(1, 100); // 生成1~100之间的均匀分布整数
for (int i = 0; i < 10; ++i) {
std::cout << dis(gen) << ' ';
}
return 0;
}
```
2. 真随机数生成算法
真随机数生成算法可以通过硬件设备(如热噪声、放射性同位素衰变等)获取真实的随机数。C++标准库并没有提供真随机数生成器,需要使用第三方库或者硬件设备来生成真随机数。