C 真隨機數生成方法

2022-08-20 23:30:16 字數 1300 閱讀 6428

大家都知道裡面的randsrand()函式吧?

他們其實是偽隨機數生成器,生成的隨機數有週期性,而且取決於隨機種子。

那麼如何生成真隨機數呢?下面我來講一下兩個系統下的生成方法。

這個winrandom類呼叫了系統的加密秘鑰生成器,這個生成器呼叫核心生成秘鑰,所以是硬體的真隨機數。

#include #include class winrandom 

~winrandom()

bool randbuf(void *dest, int len)

# define _(func, typ) \

typ func()

_(randint, int)

_(randlong, long long)

_(randunsigned, unsigned)

_(randunsignedlong, unsigned long long)

_(randshort, short)

_(randunsignedshort, unsigned short)

_(randchar, char)

_(randunsignedchar, unsigned char)

_(randsignedchar, signed char)

};

winrandom r;

printf("unsigned: %u\nlong long: %lld\n",

r.randunsigned(),

r.randlong());

就是這樣,還不用srand,是不是很方便啊?很適合做資料生成器!

注意:請不要在比賽時使用!

注意:請不要在比賽時使用!

注意:請不要在比賽時使用!

要在比賽時使用請看下方【通用】

由於 linux 系統自帶了/dev/random,所以請使用 stl。

#include int main()
這個在 windows 系統上也可以用,但是呼叫的就是srandrand...

這個隨機數生成器在 windows 和 linux 上都可以工作,但是只有在 linux 上才是真隨機數。windows 上他生成的隨機數週期很大,可以視為真隨機。

#include int main()

C 隨機數生成方法

一 c 中不能使用random 函式 c 中常用rand 函式生成隨機數,但嚴格意義上來講生成的只是偽隨機數 pseudo random integral number 生成隨機數時需要我們指定乙個種子,如果在程式內迴圈,那麼下一次生成隨機數時呼叫上一次的結果作為種子。但如果分兩次執行程式,那麼由於...

C 隨機數的生成方法

一 c 中不能使用random 函式 c 中常用rand 函式生成隨機數,但嚴格意義上來講生成的只是偽隨機數 pseudo random integral number 生成隨機數時需要我們指定乙個種子,如果在程式內迴圈,那麼下一次生成隨機數時呼叫上一次的結果作為種子。但如果分兩次執行程式,那麼由於...

隨機數的生成方法(C)

在 c 語言中,rand 函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是乙個偽隨機數,以乙個數 種子 為基準,利用遞推公式推算出來的一係數。當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數。當計算機正常開機後,這個種子的值是定了的。為了改變這個種子的值,c...