为什么说Java中的随机数都是伪随机数

2021-01-14 09:32:51 字数 3324 阅读 5280

1楼:匿名用户

什么是伪随机数?

1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。

2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。

(随机这个属性和算法本身就是矛盾的)

3.通过真实随机事件取得的随机数才是真随机数。

java随机数产生原理:

java的随机数产生是通过线性同余公式产生的,也就是说通过一个复杂的算法生成的。

为什么说java中的随机数都是伪随机数

2楼:百毒千毒

声明下:以下是我复制的,我本人也算是涨知识了.噪声厉害了我的哥!

1.只要是通过算法产生的随机数都是伪随机数。

2.通过真实随机事件取得的随机数才是真随机数。

3.linux和windows 系统都有自带的真随机数函数,它们是通过外部噪音来实现的,如,敲击键盘的时间间隔,特定的中断等。

4.像编程语言自带的随机数函数是很容易被黑客破解的5.例如:

java的随机数产生是通过去模运算产生的,黑客只需要知道连续的2个随机数就可以**下一个随机数。python 采用的是mt算法,破解难度要稍微比java 难一些!

3楼:匿名用户

因为java中的随机数是为随机数

为什么说java中的随机数都是伪随机数

4楼:蔡新

什么是伪随机数?

1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。

2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。

(随机这个属性和算法本身就是矛盾的)

3.通过真实随机事件取得的随机数才是真随机数。

java随机数产生原理:

java的随机数产生是通过线性同余公式产生的,也就是说通过一个复杂的算法生成的。

伪随机数的不安全性:

java自带的随机数函数是很容易被黑客破解的,因为黑客可以通过获取一定长度的随机数序列来推出你的seed,然后就可以**下一个随机数。

不用种子的不随机性会增大的原因:

java.math.random()实际是在内部调用java.util.random()的,使用一个和当前系统时间有关的数字作为种子数。两个随机数就很可能相同。

double a = math.random();

double b = math.random();

random r1 = new random();

r1.nextint(10);

random r2 = new random();

r2.nextint(10);

java中产生随机数的方法有两种:

第一种:math.random()

第二种:new random()

一、java.lang.math.random:

调用这个math.random()函数能够返回带正号的double值,取值范围是[0.0,1.

0),在该范围内(近似)均匀分布。因为返回值是double类型的,小数点后面可以保留15位小数,所以产生相同的可能性非常小,在这一定程度上是随机数。

二、java.util.random:

random r1 = new random();

random r2 = new random();

random r3 = new random(10);

random r4 = new random(10);

下面random()的两种构造方法:

random():使用一个和当前系统时间对应的相对时间有关的数字作为种子数。

random(long seed):直接传入一个种子数。

种子的作用是什么?

种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。

举例:random r =new random(100);

system.out.println(r.nextint(20));

种子数只是随机算法的起源数字,和生成的随机数字的区间没有任何关系。

初始化时100并没有起直接作用(注意:不是没有起作用),r.nextint(20)中的20是随机数的上限,产生的随机数为0-20的整数,不包括20。

java里的伪随机数的概念?

5楼:千锋教育

/**random:产生随机数的类

**构造方法:

* publicrandom():没有给种子,用的是默认种子,是当前时间的毫秒值

* publicrandom(longseed):给出指定的种子

** 给定种子后,每次得到的随机数是相同的。

**成员方法:

* publicintnextint():返回的是int范围内的随机数

* publicintnextint(intn):返回的是[0,n)范围的内随机数*/

6楼:匿名用户

首先要说的是,什么叫伪随机数.计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。

计算机只能生成相对的随机数,即伪随机数。伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。

补:大哥.这是原话.但已经很白话了?还要怎么样你才能听明白?认识字的应该都能懂了.意思就是:世界上没有绝对的事情.什么事都是相对的.ok?

rand()函数产生的随机数为什么是伪随机数

7楼:匿名用户

计算机的运行过程是一个

确定的过程,每一条指令都是确定,因此从根本上来讲,计算机产生不了真正意义上的随机数。

那么伪随机数怎么理解呢?举个最简单的例子,要随机产生0~9十个数,那么计算机可以循环快速的给出0、1、2、3、4、5、6、7、8、9、0、1……这样的一个数列,这个数列并不是随机的,而是有规律的(所以才叫做伪随机),当我们按下按钮,或者点下鼠标的瞬间,机器停止,并显示最后的一个数字(有点类似于玩***),这个过程我们挑选出来的数字好像是随机的,但其实并不是100%随机,只有我们去触发机器的那个时间点是随机的,其他都是有规律的,所以就是伪随机。

rand()函数就是给出一列数值(这列数值是被事先打乱,但是是固定的数值),所以属于伪随机数。只是机器执行到rand()函数的时间点是随机的,才让我们感觉执行结果是随机的一样。

rand函数产生的随机数为什么是伪随机数

1楼 匿名用户 计算机的运行过程是一个 确定的过程,每一条指令都是确定,因此从根本上来讲,计算机产生不了真正意义上的随机数。 那么伪随机数怎么理解呢?举个最简单的例子,要随机产生0 9十个数,那么计算机可以循环快速的给出0 1 2 3 4 5 6 7 8 9 0 1 这样的一个数列,这个数列并不是随...

伪随机数如何能寻找到规律,Java里的伪随机数的概念?

1楼 清风无真汝 可以啊,小意思。用极坐标系就ok了。 一般的随机是垂直坐标系上的x y的均布,把x y换成极坐标系里面的角度和半径,得到点的x y值就是非均布的了。 算法思路是这样的,怎么实现10以下80 我就懒得细想了。 2楼 无论如何,都应该知道种子,然后用这个种子得到一个伪随机序列,下一次,...

随机数生成器用的是什么原理,随机数生成器原理

1楼 匿名用户 1970年的资料是用串行位移寄存器,反馈输入叠加 随机数生成器原理 2楼 匿名用户 不懂。。。。鉴定完毕。。。 问比尔盖次 3楼 匿名用户 这个要问数学老师 随机数表到处都有 原理就是随鸡选几个拉 电脑取随机数是什么原理,是真正的随机数吗 4楼 匿名用户 首先, 真随机 也有不同的含...