随机数发生器

随机数是骗人的,.Net、Java、C为我作证(转)

匿名 (未验证) 提交于 2019-12-02 21:52:03
原文链接: http://www.cnblogs.com/CielWater/p/3982076.html 几乎所有编程语言中都提供了"生成一个随机数"的方法,也就是调用这个方法会生成一个数,我们事先也不知道它生成什么数。比如在.Net中编写下面的代码: Random rand = newRandom(); Console.WriteLine(rand.Next()); 运行后结果如下: Next()方法用来返回一个随机数。同样的代码你执行和我的结果很可能不一样,而且我多次运行的结果也很可能不一样,这就是随机数。 一、陷阱 看似很简单的东西,使用的时候有陷阱。我编写下面的代码想生成100个随机数: for(int i=0;i<100;i++) { Random rand = new Random(); Console.WriteLine(rand.Next()); } 太奇怪了,竟然生成的"随机数"有好多连续一样的,这算什么"随机数"呀。有人指点"把new Random()"放到for循环外面就可以了: Random rand = newRandom(); for(int i=0;i<100;i++) { Console.WriteLine(rand.Next()); } 运行结果: 确实可以了! 二、这是为什么呢? 这要从计算机中"随机数"产生的原理说起了。我们知道

C# Random函数

风格不统一 提交于 2019-12-02 07:53:56
https://www.cnblogs.com/soulmate/p/5607060.html .net.Framework中提供了一个专门产生随机数的类System.Random,此类默认情况下已被导入,编程过程中可以直接使用。 我们知道,计算机并不能产生完全随机的数字,它生成的数字被称为 伪随机数 ,它是以 相同的概率从一组有限的数字中选取的 ,所选的数字 并不具有完全的随机性, 但就实用而言,其随机程度已经足够了。 我们可以用以下两种方法初始化一个随机数发生器; 函数是这样用,比如100至999的随机数 Random ran=new Random(); int RandKey=ran.Next(100,999); 不过这样会有重复,可以给Random一个 系统时间做为参数 ,以此产生随机数,就不会重复了 第一种方法 不指定随机种子,系统自动选取当前时前作随机种子:(Random ra = new Random(DateTime.Now.Millisecond);) Random ra=new Random(); 第二种方法 是指定一个int型的参数作为随机种子: int iSeed=6; Random ra=new Random(iSeed); 下面我们要用到Random.Next()方法产生随机数。 ra.Next(); 它返回一个大于或等于零而小于2,147,483

shell 生成指定范围随机数与随机字符串

自作多情 提交于 2019-12-01 09:37:47
shell 生成指定范围随机数与随机字符串 1.使用系统的 $RANDOM 变量 fdipzone @ubuntu :~$ echo $RANDOM 17617 $RANDOM 的范围是 [0, 32767] 如需要生成超过32767的随机数,可以用以下方法实现。 例:生成400000~500000的随机数 #!/bin/bash function rand(){ min=$1 max=$(($2-$min+1)) num=$(($RANDOM+1000000000)) #增加一个10位的数再求余 echo $(($num%$max+$min)) } rnd=$(rand 400000 500000) echo $rnd exit 0 2.使用date +%s%N 例:生成1~50的随机数 #!/bin/bash function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd=$(rand 1 50) echo $rnd exit 0 3.使用/dev/random 和 /dev/urandom /dev/random 存储着系统当前运行环境的实时数据,是阻塞的随机数发生器,读取有时需要等待。 /dev/urandom 非阻塞随机数发生器,读取操作不会产生阻塞。

QKD 一些术语的含义

馋奶兔 提交于 2019-11-28 16:51:21
密钥率:每个信道使用的比特数。 系统开销:不能用来提取最终密钥的信号百分比。 SNU :散粒噪声单元 RNG :随机数发生器 QRNG :量子随机数发生器 TRNG :真正的随机数生成器 PRNG :伪随机数发生器 边信息: 不知道 量子过程的内在随机性: 不知道 DI :设备依赖性。 MDI :测量设备独立。 SI :源独立 SI-QRNG :源无关的量子随机数发生器 CM :协方差矩阵 QCNR :量子噪声与经典噪声之比 variance of quadratures :象限方差 be trusted and well characterized :是可信并且有良好特征的 e., 翻译为 “即”。 来源: https://www.cnblogs.com/zf007/p/11415982.html

转载c语言生成随机数

£可爱£侵袭症+ 提交于 2019-11-27 15:57:01
在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下来以C语言为例介绍其随机值函数 rand() 用法。 原理 引用百度百科,首先,需要包含头文件: #include <stdlib.h> rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件: #include <time.h> 理论太泛,下面用例子分析理解。 举例分析 先来理解以下伪随机数,编译以下代码: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(1); int i; for (i = 0; i < 10; i++) printf("%d, ", rand()%11); }

PHP函数-数学函数

为君一笑 提交于 2019-11-26 14:11:22
abs 返回参数 number 的绝对值 acos 返回参数 arg 的反余弦值,单位是弧度 asin 返回 arg 的反正弦值,单位是弧度 atan2 计算两个变量 x 和 y 的反正切值 atan 返回 arg 的反正切值,单位是弧度 base_convert 任意进制之间的转换 1 <?php 2 $number="123456"; 3 $number2=base_convert($number,10,2); 4 echo "十进制数\"$number\"转成二进制为\"$number2\"."; 5 ?> bindec 将二进制数转换为十进制的整数.可转换的最大的数为 31位1(即十进制的 2147483647) ceil 返回不小于参数 value 值的最小整数,如果有小数部分则进一位 cos 返回参数 arg 的余弦值.参数 arg 的单位为弧度 cosh 返回参数的 arg 的双曲余弦值,定义为(exp(arg)+exp(-arg))/2 decbin 将十进制转换为二进制 dechex 将十进制转换为十六进制 decoct 进十进制数字转成八进制数 deg2rad 将参数 number 从角度转换成弧度 exp 计算 e (自然对数的底) 的指数,返回 e 的 arg 次方值 floor 实现舍去法取整,该函数返回不大于参数 value 值的下一个整数,将