介绍:
c f cf cf 提到不要用 r a n d ( ) : rand(): rand(): Don’t use rand(): a guide to random number generators in C++
- r a n d ( ) rand() rand() 的随机数太假, R A N D _ M A X RAND\_MAX RAND_MAX 很小,只有 32767 32767 32767
- r a n d o m _ s h u f f l e ( ) random\_shuffle() random_shuffle() 用的也是这个自带的 r a n d ( ) rand() rand(),元素在数组里移动的距离也很小
- r a n d ( ) rand() rand() 使用的伪随机算法是 l i n e a r linear linear c o n g r u e n t i a l congruential congruential g e n e r a t o r generator generator (线性同余发生器),在低位循环节很低
然后它就叫我们用茅台 19937 19937 19937,取名来自于使用的算法 —— M e r s e n n e Mersenne Mersenne T w i s t e r Twister Twister算法,以及它用到的质数 —— 2 19937 − 1 2^{19937}−1 219937−1
用法:
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
用 r n d ( ) rnd() rnd() 即可,括号内部是随机种子,也可以换成下面这个:
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
random_shuffle()
可以替换为:
shuffle(a+1, a+n+1, rnd);
然后就可以快的随机卡题咯~