传统随机数生成器 srand(time(0)):指定随机数种子,会影响后面的随机数 rand():获得随机数,在windows下生成的数据范围为0-32726 示例:生成20个 1~10之间的整数。 int main() { srand(time(0)); int ans; int b=10; for(int i=1;i<=20;i++) { ans=1+rand()%(b-1); cout<<ans<<' '; } return 0; } mt19937mt19937是C++11新加入的伪随机数产生器,用于产生高性能、分布均匀的随机数。头文件:#include<random>,返回值为unsigned int。该算法由松本眞(Makoto Matsumoto)和西村拓士(Takuji Nishimura)在 1997 年提出,期间还得到了「算法之神」高德纳(Donald Ervin Knuth)的帮助。 mt是因为这个伪随机数产生器基于Mersenne Twister(梅森旋转)算法。 19937 则取自算法中用到的梅森素数2^19937-1,梅森素数是算法生成伪随机数的循环长度(period),而旋转则说的是算法内部对定长二进制串循环位移的过程。 std::mt19937 32位 std::mt19937_64 64位 #include<random> #include<ctime> typedef std::mt19937 Random_mt19937; Random_mt19937 rnd(time(0)); int main() { printf("%d\n",rnd()); return 0; } C++里还有另外一个东西 std::random_device,在linux系统下是按照熵池来生成的,“在熵池耗尽前可以高速生成随机数”。可以用 std::random_device 给 std::mt19937 生成种子: int main() { random_device seeds; mt19937 example(seeds()); cout << example() << endl; return 0; }
|