随机数

【C】揭秘rand()函数;

浪子不回头ぞ 提交于 2020-03-28 04:12:34
  相信只要是程序猿都会知道rand()函数是用来取随机数的一个库函数,但是它出的结果真的是一组随机数吗?我们来看看这段代码运行的结果: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 int j; 6 for(j=0;j<5;j++) 7 { 8 printf("rand():%d\n",rand()); 9 } 10 } linux下gcc每次运行结果如下: windows vc6.0每次运行结果如下:(本人windows系统为64位机) (由于编译器的不同,可能显示的结果也不同吧!) rand()函数不是随机的吗?怎么每次运行的结果都是一样的?其实计算机也不像人们想象的那么智能,它也是按照人们的思想来随机出数的。 本人在linux下查找头文件没有找到rand()函数的定义,上网查了一下也没找到,说是被封装到库中了。若是有大牛们看到这篇文章,请帮帮小弟解决心中的疑问吧! 那么如何用rand()函数获取你想要的取值范围呢?其实rand()函数的取值范围在0~RAND_MAX之间; 那么什么是RAND_MAX呢? linux下的RAND_MAX值为2147483647(二进制32位) windows下的RAND_MAX值为32767(二进制16位) 由此可见RAND

使用Map统计随机数出现的次数

六月ゝ 毕业季﹏ 提交于 2020-03-27 23:40:15
使用Map统计随机数出现的次数 题:统计随机数字出现的次数,以及出现次数最多的数字和次数分别是多少? 解答: 使用Map不可存储相同键的属性来统计,如果在Map中没有出现该数字,那么它出现的次数就为1;如果在Map中已经存在该数字,那么把该值出现的次数+1 import java.util.*; public class MapCountWords { public static void main(String[] args) { /** * 统计随机数字出现的次数,以及出现次数最多的次数是多少? */ TreeMap<Integer,Integer> map = new TreeMap(); for (int i = 0; i < 50; i++) { int num = (int) (Math.random() * 40 + 10); //如果该值在map中没有出现,则出现次数为1 if (map.get(new Integer(num)) == null) { map.put(new Integer(num), 1); } else { //如果该值在map中存在,则把出现次数+1 map.put(num, ((Integer)map.get(num)).intValue()+1); } } for (Map.Entry<Integer,Integer> entry :

什么是 UUID ?

耗尽温柔 提交于 2020-03-27 12:24:10
3 月,跳不动了?>>> UUID 是指Universally Unique Identifier,翻译为中文是 通用唯一识别码 ,UUID 的目的是让分布式系统中的所有元素都能有唯一的识别信息。如此一来,每个人都可以创建不与其它人冲突的 UUID,就不需考虑数据库创建时的名称重复问题。 定义 UUID 是由一组32位数的16进制数字所构成,是故 UUID 理论上的总数为16^32=2^128,约等于3.4 x 10^123。 也就是说若每纳秒产生1百万个 UUID,要花100亿年才会将所有 UUID 用完 格式 UUID 的十六个八位字节被表示为 32个十六进制数字,以连字号分隔的五组来显示,形式为 8-4-4-4-12,总共有 36个字符(即三十二个英数字母和四个连字号)。例如: 123e4567-e89b-12d3-a456-426655440000 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx 数字 M 的四位表示 UUID 版本,当前规范有5个版本,M可选值为 1, 2, 3, 4, 5 ; 数字 N 的一至四个最高有效位表示 UUID 变体( variant ),有固定的两位 10xx 因此只可能取值8 , 9, a, b UUID版本通过M表示,当前规范有5个版本,M可选值为 1, 2, 3, 4, 5 。这5个版本使用不同算法

HTTPS大致原理(易于理解)

↘锁芯ラ 提交于 2020-03-27 03:03:40
我先简单说下自己对HTTPS的大致描述,也是看了几篇博客之后的想法: 首先要简单了解对称加密和非对称加密: 对称加密:加密解密都用一个秘钥。 非对称加密:一个公钥,一个私钥。可以用公钥加密,私钥解密;也可以私钥加密,公钥解密。其他的组合都不行。 了解这点知识就够了,下面我们开始HTTPS的描述: HTTPS 先用非对称秘钥传输一个随机数 , 然后客户端和服务端都用这个随机数进行对称加密进行实际的数据传输 。 首先明确一点:非对称加密很耗时,不可能对实际的数据都非对称加密来传输。所以我们需要对称加密来传输数据。 但问题是,我们怎么让双方都知道这个对称加密算法的秘钥呢?秘钥只能一边产生发送给另一边,总不可能两边一拍脑门,心有灵犀正好想出来一个相同的秘钥吧? 所以在传输数据前,要用 非对称加密算法 加密传输(即沟通好) 之后对称加密算法的秘钥 。 大概步骤(不严谨,但易于理解): 1.客户端发请求给服务端。 2.服务端返回数字证书给客户端(简单理解为非对称加密算法的公钥就行,对应的私钥还在服务端手上,没有泄露) 3.客户端生成一个随机数(对称加密算法需要的随机数),把这个随机数用上一步得到的公钥加密传给服务端 4.服务端收到加密的随机数,用私钥解密得到随机数。 此时,客户端和服务端都拥有了这个随机数,并且它没有被泄露,即使黑客截取了公钥或者加密后的随机数都无法解密

js产生随机数函数

流过昼夜 提交于 2020-03-25 09:32:14
本文转载自:http://www.duozhankeji.com/qd/10115.html 函数: //产生随机数函数 function RndNum(n){ var rnd=""; for(var i=0;i<n;i++) rnd+=Math.floor(Math.random()*10); return rnd; } 调用: alert(RndNum(5)); 将产生一个5位的随机数,例如:53206 js本身提供了产生随机数的方法 random() 方法可返回介于 0 ~ 1 之间的一个随机数。 这不能满足我们的需求,所以写了上面这个函数 调用js原生提供的随机数方法 document.write(Math.random()) 输出:0.9635477642483878 来源: https://www.cnblogs.com/phpyangbo/p/6129868.html

python--UUID唯一标识符

你离开我真会死。 提交于 2020-03-25 03:46:23
UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ) python的uuid模块提供UUID类和函数uuid1(), uuid3(), uuid4(), uuid5() 来生成1, 3, 4, 5各个版本的UUID uuid.uuid1([node[, clock_seq]]) : 基于时间戳 使用主机ID, 序列号, 和当前时间来生成UUID, 可保证全球范围的唯一性. 但由于使用该方法生成的UUID中包含有主机的网络地址, 因此可能危及隐私. 该函数有两个参数, 如果 node 参数未指定, 系统将会自动调用 getnode() 函数来获取主机的硬件地址. 如果 clock_seq 参数未指定系统会使用一个随机产生的14位序列号来代替 import uuid x=uuid.uuid1() #<class 'uuid.UUID'> e5fc64ca-081c-11ea-b609-74d02bb73e44 #74d02bb73e44 是16进制的mac地址 print(type(x),x) uuid.uuid3(namespace, name) :

C#生成随机数的三种方法

橙三吉。 提交于 2020-03-22 02:51:38
随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数. 1 2 Random rd = new Random(); int i = rd.Next(); 这种随机数可以达到一些要求较低的目标,但是如果在高并发的情况下,Random类所取到的系统时钟种子接近甚至完全一样,就很有可能出现重复,这里用循环来举例 1 2 3 4 5 for ( int i = 0; i < 10; i++) { Random rd = new Random();   //无参即为使用系统时钟为种子 Console.WriteLine(rd.Next().ToString()); } 这个例子会输出10个相同的"随机数". 突显出的问题:因为Random进行伪随机数的算法是固定的,所以根据同一个种子计算出的数字必然是一样的.而以当代计算机的运行速度,该循环几乎是在瞬间完成的,种子一致,所以会出现10次循环输出同一随机数的情况. 有的时候使用random生成随机数的时候往往不是随机的 这是为什么呢? 随机数生成方法可以说是任何编程语言必备的功能,它的重要性不言而言,在C#中我们通常使用Random类生成随机数

【译】使用SQL生成非均匀随机数

不羁岁月 提交于 2020-03-21 22:34:27
正如”随机数的生成过程非常重要因此我们不能对其视而不见”(引自Robert R -橡树岭国家实验室),我们希望占用您一点点宝贵的时间在基于SQL Server MVP Jeff Moden 的成果的基础上完成这项工作。对于使用SQL来产生随机数来说,我们会重点讲解从均匀分布随机数(non-uniformly distributed random numbers)的基础上生成非均匀分布随机数(uniformly distributed random numbers);包括一些统计分布的基础来帮你起步。 正如我们所知,随机数在仿真中非常重要(尤其是 蒙特卡洛仿真法 ),还有随机数在 密码学 以及其它高科技领域中也扮演了同样重要的角色。除此之外在我们的SQL Server中有时也需要产生大量的随机数据来测试SQL的性能。 因为我并不是统计学家,因此我们这里仅仅来看用SQL生成并且能显而易见的看出其随机性的的随机数字,而并不会深入到数学原理来看这个随机性是真正的“随机”还是“貌似随机”我们的意图是文章中算法的正确性以及这个算法在非关键领域是否足够使用。 通常来说,由 均匀随机数转换成非均匀随机数 的技术是将均匀随机数乘以 累计分布函数(CDF) 对于目标数据的反转。但在实践中,累计分布函数是否针对特定分布存在有效哪怕是接近的函数并不好估计。但幸运的是

图解SSL/TLS协议

拟墨画扇 提交于 2020-03-20 14:03:26
我看了CloudFlare的说明( 这里 和 这里 ),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制。它配有插图,很容易看懂。 下面,我就用这些图片作为例子,配合我半年前写的 《SSL/TLS协议运行机制的概述》 ,来解释SSL协议。 一、SSL协议的握手过程 开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。 假定客户端叫做爱丽丝,服务器叫做鲍勃,整个握手过程可以用下图说明(点击看大图)。 握手阶段分成五步。 第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。 第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。 第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。 第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。 第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。 上面的五步,画成一张图,就是下面这样。 二、私钥的作用 握手阶段有三点需要注意。 (1

JS弹幕代码分析

烈酒焚心 提交于 2020-03-20 10:59:40
现在许多直播软件和视频都有弹幕功能,让我们来看看并分析是怎么实现的。 这边我主要分析下js的代码,想看源码的朋友送上链接, http://sandbox.xinfan.org/xdd... HTML代码如下(css代码就不展示了,想看的直接看源码吧): <div id="main" class="container"> <p class="p0">啦啦啦啦啦啦啦</p> <p class="p1">啦啦啦啦啦啦啦</p> </div> <div class="footer"> <input id="ipt" class="ipt" type="text" placeholder="说点什么?"/> <button id="launch" class="launch" type="button" onclick="Leave()">发射</button> <button id="clear" class="clear" type="button">清屏</button> </div> </div> JS代码如下: var num = 2; //声明了num=2 var _p = document.getElementsByTagName("p"); //获取标签p. var main = document.getElementById("main"); //获取Id为mian的标签