rand()

  • 范围:0 - 32767

  • 不是真正的随机,只是因为周期很长,看起来像

  • 如果不进行初始化,每次输出的结果是相同的

# include <bits/stdc++.h>
using namespace std;
signed main(){
freopen("1.out", "w", stdout);
for(int i = 1; i <= 10; i++){
cout << rand() << " ";
}
}
第一次:41 18467 6334 26500 19169 15724 11478 29358 26962 24464
第二次:41 18467 6334 26500 19169 15724 11478 29358 26962 24464
  • 使用 srand() 初始化
# include <bits/stdc++.h>
using namespace std;
signed main(){
freopen("1.out", "w", stdout);
cout << time(0) << "time\n";
srand(time(0));
for(int i = 1; i <= 10; i++){
cout << rand() << " ";
}
}
第一次:
1699190385time
6040 29445 28556 23486 1862 13319 24738 16235 15802 22910
第二次:
1699190429time
6184 10855 28148 927 29720 22256 30613 18506 21416 14539

Xor_shift

1.初始化就是设定随机种子,不同的设定产生不同的伪随机序列

2.异或和移位每次都在上一次产生的值上产生新的值,因为在很大的值中舍弃了一些值,所以每次产生的值看起来就象是随机值,也就是伪随机数

unsigned i64 Xor_shift(unsigned i64 x){
x ^= x >> 13;
x ^= x << 7;
x ^= x >> 17;
return x;
}
  • 13,7,17或13,5,17或26,15,17均可,但不是任意三个数都行
srand() 的第二组输出作为种子
789550 1382764 3577452 117791 3832198 2830311 3914891 2387034 2721470 1859012

mt19937

  • 范围:unsigned   long   long

  • 假随机,只是相比 rand() 周期更长

# include <bits/stdc++.h>
# define i64 long long
using namespace std;
signed main(){
freopen("1.in", "w", stdout);
mt19937 mt_rand(time(0));
for(int i = 1; i <= 10; i++){
cout << mt_rand() << " ";
}
}
471076068 2678204948 2173609593 3795441098 2911085438 2517774531 2072600482 3361426292 3805571956 4164973925
posted on   Bubble_e  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构



点击右上角即可分享
微信分享提示