C语言生成随机数代码
1#include3#include5#include7intmain(){9inta;11srand((unsigned)time(NULL));//读取系统时间,产生一个种子数值13a=rand();15printf("%d ",a);//可扩展为验证码代码17return0;19}生成一定范围内的随机数在实际开发中,我们往往需要一定范围内的随机数,过大或者过小都不符合要求,那么,如何产生一定范围的随机数呢?我们可以利用取模的方法:
inta=rand()%10;//产生0~9的随机数,注意10会被整除如果要规定上下限:
inta=rand()%51+13;//产生13~63的随机数分析:取模即取余,rand()%51+13我们可以看成两部分:rand()%51是产生0~50的随机数,后面+13保证a最小只能是13,最大就是50+13=63。
代码示例:
#include#include#includeintmain(){inta;srand((unsigned)time(NULL));a=rand()%51+13;printf("%d ",a);return0;}
C++随机整数生成
1-0:MicrosoftVC++产生随机数的原理:
Srand()和Rand()函数。它本质上是利用线性同余法,y=ax+b(modm)。其中a,b,m都是常数。因此rand的产生决定于x,x被称为Seed。Seed需要程序中设定,一般情况下取系统时间作为种子。它产生的随机数之间的相关性很小,取值范围是0—32767(int),即双字节(16位数),若用unsignedint双字节是65535,四字节是4294967295,一般可以满足要求。
1-1:线性同余法:
?/P>
其中M是模数,A是乘数,C是增量,为初始值,当C=0时,称此算法为乘同余法;若C≠0,则称算法为混合同余法,当C取不为零的适当数值时,有一些优点,但优点并不突出,故常取C=0。模M大小是发生器周期长短的主要标志,常见有M为素数,取A为M的原根,则周期T=M-1。例如:
a=1220703125
a=32719 (程序中用此组数)
a=16807
代码:
voidmain()
{
constintn=100;
doublea=32719,m=1,f[n+1],g[n],seed;
m=pow(2,31);
cout