随机数在计算机科学中扮演着重要角色,广泛应用于模拟、抽样、游戏、密码学、机器学习、算法设计(如随机化快速排序)等领域。
计算机本身是确定性的系统,因此通常生成的是伪随机数——看似随机但实际由确定算法产生的序列。在某些高安全要求场景(如密钥生成)则需要真随机数,来源于物理过程。
随机数的类型
| 类型 | 描述 | 来源 | 可否重现 | 典型用途 |
|---|---|---|---|---|
| 真随机数 | 基于物理噪声、量子效应、热噪声等不可预测现象 | 硬件随机数发生器(HRNG) | 不可重现 | 密码学、彩票、一次一密 |
| 伪随机数 | 由数学算法产生的确定性序列,但通过统计测试 | 伪随机数生成器(PRNG) | 可重现(给定种子) | 模拟、游戏、蒙特卡洛方法 |
| 密码学安全伪随机数 | 满足额外不可预测性要求的PRNG,即使暴露部分输出也难以推断前后值 | CSPRNG(如ChaCha20、AES-CTR) | 可重现(种子保密) | 会话密钥、随机数Nonce |
随机数实现
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
srand(time(0)); // 使用当前时间作为种子
cout<<rand(); // 生成随机数
return 0;
}
范围公式:随机生成a~b之间的随机数
rand() % (b - a + 1) + a;