C++rand函数采用的LCG
seedn+1=(seedn×214013+2531011)mod231
rn+1=seedn+1>>16,0
手动代码实现
#include <bits/stdc++.h>
using namespace std;
unsigned int seed_next = 0;
int LCG_seed()
{
seed_next = (seed_next * 214013 + 2531011) % (1<<31);
return seed_next>>16 & ((1<<15)-1);
}
void test(int seed1,int seed2)
{
srand(seed1);
cout<<"种子为1的VC++rand伪随机数:"<<endl;
for (int i=0;i<5;i++) cout<<rand()<<" ";
cout<<endl;
seed_next = seed1;
cout<<"种子为1的手动实现rand"<<endl;
for (int i=0;i<5;i++) cout<<LCG_seed()<<" ";
cout<<endl;
puts("------------------------------------");
srand(seed2);
cout<<"种子为100的VC++rand伪随机数:"<<endl;
for (int i=0;i<5;i++) cout<<rand()<<" ";
cout<<endl;
seed_next = seed2;
cout<<"种子为100的手动实现rand"<<endl;
for (int i=0;i<5;i++) cout<<LCG_seed()<<" ";
cout<<endl;
}
int main()
{
int seed1 = 1, seed2 = 100;
test(seed1,seed2);
return 0;
}