隨機數生成 偽隨機數和真隨機數

2021-09-12 18:28:01 字數 783 閱讀 4493

c語言隨機數的生成,很隨機,又不隨機,比如像下面的程式

//c語言生成隨機數的函式在stdlib.h庫中

#include#includeint main()

return 0;

}

上面的**經過執行生成了

41 18467 6334 26500
但是無論執行多好遍結果都是一樣的,隨機數並不隨機。

這是因為rand()函式包含乙個隨機數種子,當我們沒有指定時,這個種子預設為1,如果我們想要每次執行的結果不同,就需要乙個變化的種子。

現實世界的時間是流逝的,每一刻的時間都是不同的,這正滿足了我們想要的隨機。所以我們採集系統時間來做隨機數種子,保證每次生成的結果不同。

這裡用到time.h庫

#include#include#includeint main()

return 0;

}

srand函式生成隨機種子。

srand函式的引數為無符號數,用(unsigned)強制轉換

time(null)返回系統當前時間與2023年1月1日0時0分0秒之間的時間差,以秒為單位

這時候數字已經可以隨機了,但是怎樣才能獲得我們想要的數字?

%(取餘)不失為乙個好選擇。

例如,我們取0~10

a=rand()%10;
我們取10~100

a=10+rand()%100

隨機數 科普 真隨機數和偽隨機數

位元幣使用者很喜歡討論 非對稱加密 橢圓曲線 量子計算機 這類高深莫測的話題,然後再以一種非常莫名其妙的方式把幣弄丟,比如說 隨機 隨機很重要,對於位元幣這種密碼學電子貨幣來說,尤其重要。可惜社群內對於隨機的討論並不多,導致很多人缺乏正確的認識,因此,我們今天就和大家聊聊隨機。說到隨機,有兩個必須要...

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

生成偽隨機數

真正的隨機數只能自然生成,所以我們人工得到的隨機數被稱為偽隨機數。使用中的rand 函式可以生成0 rand max之間的隨機整數.rand 函式使用乙個起始的種子值生成一系列數字,對於乙個特定的種子產生的序列數永遠是相同的。如果使用rand 函式只使用乙個種子值,即預設的種子值,就會使得序列數是有...