為什麼說Java中的隨機數都是偽隨機數

2021-05-18 02:07:49 字數 3324 閱讀 9683

1樓:百毒千毒

宣告下:以下是我複製的,我本人也算是漲知識了.噪聲厲害了我的哥!

1.只要是通過演算法產生的隨機數都是偽隨機數。

2.通過真實隨機事件取得的隨機數才是真隨機數。

3.linux和windows 系統都有自帶的真隨機數函式,它們是通過外部噪音來實現的,如,敲擊鍵盤的時間間隔,特定的中斷等。

4.像程式語言自帶的隨機數函式是很容易被黑客破解的5.例如:

java的隨機數產生是通過去模運算產生的,黑客只需要知道連續的2個隨機數就可以**下一個隨機數。python 採用的是mt演算法,破解難度要稍微比java 難一些!

2樓:匿名使用者

因為java中的隨機數是為隨機數

為什麼說java中的隨機數都是偽隨機數

3樓:蔡新

什麼是偽隨機數?

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中的隨機數都是偽隨機數

4樓:匿名使用者

什麼是偽隨機數?

1.偽隨機數是看似隨機實質是固定的週期性序列,也就是有規則的隨機。

2.只要這個隨機數是由確定演算法生成的,那就是偽隨機,只能通過不斷演算法優化,使你的隨機數更接近隨機。

(隨機這個屬性和演算法本身就是矛盾的)

3.通過真實隨機事件取得的隨機數才是真隨機數。

java隨機數產生原理:

java的隨機數產生是通過線性同餘公式產生的,也就是說通過一個複雜的演算法生成的。

java裡的偽隨機數的概念?

5樓:千鋒教育

/** random:產生隨機數的類

* * 構造方法:

*  public random():沒有給種子,用的是預設種子,是當前時間的毫秒值

* public random(long seed):給出指定的種子

** 給定種子後,每次得到的隨機數是相同的。

** 成員方法:

*  public int nextint():返回的是int範圍內的隨機數

* public int nextint(int n):返回的是[0,n)範圍的內隨機數*/

6樓:匿名使用者

首先要說的是,什麼叫偽隨機數.計算機不會產生絕對隨機的隨機數,計算機只能產生「偽隨機數」。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。

計算機只能生成相對的隨機數,即偽隨機數。偽隨機數並不是假隨機數,這裡的「偽」是有規律的意思,就是計算機產生的偽隨機數既是隨機的又是有規律的。

補:大哥.這是原話.但已經很白話了?還要怎麼樣你才能聽明白?認識字的應該都能懂了.意思就是:世界上沒有絕對的事情.什麼事都是相對的.ok?

rand()函式產生的隨機數為什麼是偽隨機數

7樓:匿名使用者

計算機的執行過程是一個

確定的過程,每一條指令都是確定,因此從根本上來講,計算機產生不了真正意義上的隨機數。

那麼偽隨機數怎麼理解呢?舉個最簡單的例子,要隨機產生0~9十個數,那麼計算機可以迴圈快速的給出0、1、2、3、4、5、6、7、8、9、0、1……這樣的一個數列,這個數列並不是隨機的,而是有規律的(所以才叫做偽隨機),當我們按下按鈕,或者點下滑鼠的瞬間,機器停止,並顯示最後的一個數字(有點類似於玩***),這個過程我們挑選出來的數字好像是隨機的,但其實並不是100%隨機,只有我們去觸發機器的那個時間點是隨機的,其他都是有規律的,所以就是偽隨機。

rand()函式就是給出一列數值(這列數值是被事先打亂,但是是固定的數值),所以屬於偽隨機數。只是機器執行到rand()函式的時間點是隨機的,才讓我們感覺執行結果是隨機的一樣。

asp隨機數問題,asp隨機數為什麼不隨機

把它寫成一個函式,然後呼叫這個函式。比如。function getrnd randomize rndsart 1 cint 10 rnd getrnd tpart rndsart end function 然後你可以直接呼叫這個函式來得到一個新的隨機數,或是每次使用shipinart前先。shipi...

C工具中,隨機數是怎樣產生的?Mathlab呢?Java

c 一般採用和系統時間搭配來產生隨機數 經典的 c程式設計教程 是這樣做的 indclude time.h srand time null int x x rand 樓主說的是matlab 吧 matlab產生隨機數的方法有很多,因為matlab專門是用來做數值計算的 randon 浮點型 rand...

EXCL中限定範圍的隨機數之和為固定值

比如,我想得到五個隨機資料,限定他們的和為100,用excel怎麼實現。4工具 資料分析 隨機數發生器,在對話方塊中,變數個數,1,表示產生一列資料 public function randc r count as long,sum i as long as string r count為隨機數個數...