随机数发生器

C++产生随机数

瘦欲@ 提交于 2020-04-06 12:01:30
原文链接: https://www.cnblogs.com/VVingerfly/p/5990714.html 随机数 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。 1.rand() 功能:随机数发生器 用法:int rand(void) 所在头文件: stdlib.h rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。 rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。 用户未设定随机数种子时

C#随机数生成

半腔热情 提交于 2020-03-13 08:17:23
private static char[] constant = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static string GenerateRandomNumber(int Length) { System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); Random rd = new Random(); for (int i = 0; i < Length; i++) { newRandom.Append(constant[rd.Next(62)]); } return newRandom.ToString(); } 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等

C# 生成随机数

隐身守侯 提交于 2020-03-13 08:17:10
private static char[] constant = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static string GenerateRandomNumber(int Length) { System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); Random rd = new Random(); for (int i = 0; i < Length; i++) { newRandom.Append(constant[rd.Next(62)]); } return newRandom.ToString(); } 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等

Java三种随机数生成方法

浪尽此生 提交于 2020-03-01 06:08:38
java的三种随机数生成方式 随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:     第一种:new Random()     第二种:Math.random()     第三种:currentTimeMillis() 第一种需要借助java.util.Random类来产生一个随机数发生器 ,也是最常用的一种,构造函数有两个,Random()和Random(long seed)。第一个就是以当前时间为默认种子,第二个是以指定的种子值进行。产生之后,借助不同的语句产生不同类型的数。   种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。以代码为例。 public static void main ( String [ ] args ) {   Random r = new Random ( 1 ) ;    for ( int i = 0 ; i < 5 ; i ++ )    {      int ran1 = r . nextInt ( 100 ) ;     System . out . println ( ran1 ) ;    } } 在编译器下产生的五个数分别为85,88,47,13,54

<转> c/c++生成随机数

穿精又带淫゛_ 提交于 2020-02-14 13:10:40
<一> C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。 (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。 例如: #include<stdio.h> #include<stdlib.h> void main() { for(int i=0;i<10;i+) printf("%d/n",rand()); } (2) 如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数: 例如:随机生成10个0~100的数: #include<stdio.h> #include<stdlib.h> #define random(x) (rand()%x) void main() { for(int x=0;x<10;x++) printf("%d/n",random(100)); } (3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand

信息熵与随机数

柔情痞子 提交于 2020-01-25 13:59:40
信息熵与随机数 在程序开发中,我们经常会用到随机数,确保某个事件发生是具有随机性,不可预测性的。而事实是随机性却不是那么随机,我们大多用的都是伪随机数。那什么才是真随机数呢? 信息熵 什么是熵?在物理学中,熵(entropy)是一个描述系统混乱程度的物理量,熵越大说明系统越无序、越混乱,不确定性越大。例如:一杯水,所有的水分子都是聚集在一起叫低熵,把这杯水静置一段时间,水分子扩散出处,弥漫到整个房间,这个过程叫熵增。整个宇宙事实上都在做熵增的运动。而人可能喜欢有序,尽量把物体放置整齐,垃圾分类处理,减少熵的增加,让世界整齐有序活动,喜欢可预测可掌控生活。 那么什么是信息熵?信息熵是描述信息的复杂程度,信息克服了多大的不确定性。例如:abcdefgh… 我们很容易推测到后面应该是ijklmn,例如数列: 1 1 2 3 5 8 13… 我们也容易知道后面的数是21。这些都是可预测性的规律,信息熵就比较低。同样的一本书,英文版本的书信息熵比较低,而中文版的信息熵比较高。因为英文有大量介词,定冠词等字母。即时去掉一两个也同样能理解这句话的意思,但是同样的一句话中文表达的信息量就远大于英文。古代的文言文信息熵就远大于今天的汉语,因为文言文的信息熵比较高,这也是省了不少竹简呀!同样高效的语言文本,最高效的信息熵应该是乱码,杂乱无章,没任何规律可循。列如:服务器密钥文件,比特币

关于随机数的前世今生

对着背影说爱祢 提交于 2020-01-24 20:15:11
首发于:洛谷日报#224 提起随机数,大家一定都不陌生。无论是在计算机科学领域,还是现实生活中,随机数的作用都不可小觑。 但随机数究竟是怎么一会事?它的作用是什么?它有事如何产生的? 本文会着重谈计算机的随机数以及产生算法,偏理论的只是会放到另一篇博客上 随机数那些事 随机数定义及其性质 想要讨论随机数,首先应该明确一下随机数的定义。毕竟这个东西比较虚,并不像算法那样明确。在各大网上也没有给出很好的定义。 那...就不死抠定义了。 随机数一般来说符合下面这几个性质。 它产生时后面那个数与前面的毫无关系 给定样本的一部分和随机算法,无法推出样本的剩余部分 其随机样本不可重现 另外还要说一下统计学伪随机数概念, 划重点 统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。(摘自百度词条) 实际上这也是在计算机中对伪随机数优劣的概念。 continue-> 伪随机数 伪随机数,也就是我们c++中常用的随机数。为什么说它是“伪”随机呢?其实只要稍微详细的了解过c++ rand函数的人应该都能懂得这一点。 因为计算机本身并不能够产生和随机数,只能通过产生一组循环节很长的数来“伪造”随机。 c+

java的三种随机数生成方式

时光毁灭记忆、已成空白 提交于 2020-01-23 00:07:13
随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种: 第一种:new Random() 第二种:Math.random() 第三种:currentTimeMillis() 第一种需要借助java.util.Random类来产生一个随机数发生器,也是最常用的一种,构造函数有两个,Random()和Random(long seed)。第一个就是以当前时间为默认种子,第二个是以指定的种子值进行。产生之后,借助不同的语句产生不同类型的数。 种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。以代码为例。 复制代码 在我的编译器下产生的五个数均为85,88,47,13,54,如果采用Random r = new Random(),产生的随机数就不同,这就是确定种子导致的结果。 而第二种方法返回的数值是[0.0,1.0)的double型数值,由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以得到整数随机数了,代码如下。 至于第三种方法虽然不常用,但是也是一种思路。方法返回从1970年1月1日0时0分0秒(这与UNIX系统有关)到现在的一个long型的毫秒数

shell实现随机数多种方法(data,random,uuid)

自闭症网瘾萝莉.ら 提交于 2020-01-03 09:24:54
在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的 不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时间段可 以保证是唯一的了。好了,废话我就不说了。呵呵。 shell脚本程序我们有那些获得随机数方法呢? 一、通过时间获得随机数(date) 这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5 shell]$ date +%s 1287764773 #获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数 #如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。 [chengmo@centos5 shell]$ date +%N 738710457 #获得当前时间的纳秒数据,精确到亿分之一秒。 #这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞 [chengmo@centos5 shell]$ date +%s%N

ios中的随机数使用

你。 提交于 2020-01-03 09:22:04
有如下三种 随机数 方法: 1. srand((unsigned)time(0)); int i = rand() % 5; 2. srandom(time(0)); int i = random() % 5; 3. int i = arc4random() % 5 (常用) ; 注:rand()实际并不是一个真正的伪随机数发生器,random()会相对好点,但也不算理想。个人来说首选arc4random() ,原因就是它是一个真正的伪随机算法,而且范围是rand()的两倍。 在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296),从而有更好的精度。此外,使用arc4random()还不需要生成随机种子,因为第一次调用的时候就会自动生成。 参考: http://www.cocoachina.com/bbs/read.php?tid=70719&keyword=%CB%E6%BB%FA%CA%FD http://www.cocoachina.com/bbs/read.php?tid-2977-fpage-2-toread--page-1.html http://www.codeios.com/thread-310-1-1.html 来源: https://www