當前位置:首頁 » 操作系統 » 生成隨機數演算法

生成隨機數演算法

發布時間: 2023-07-17 12:13:36

1. 如何快速生成隨機數 RSA演算法

可以採用32bit RSA演算法
設A從2~(N-1)
C=(A EXP D) mod N
滿足如下條件:
D是素數,N是兩個素數(P,Q)之積,
(D * E) mod ((P-1) * (Q-1))=1
因為:若
C=(A EXP D)mod N
有:
A=(C EXP E) mod N
所以,C與A 一一對應。
所以,對於A=2~(N-1),有不重復,無遺漏的偽隨機碼C。
凡是稍微扯上一點數學,尤其是高等數學的問題,我等泛泛之輩看起來就有點費勁,這里雖然文字不長,但是還得慢慢來看。
這裡面RSA演算法是密碼學三大演算法之一(RSA、MD5、DES),是一種不對稱密碼演算法。說如果滿足條件:D是素數,N是兩個素數(P,Q)之積,(D * E) mod ((P-1) * (Q-1))=1,那麼存在C與A(范圍從2到N-1)一一對應,且C=(A EXP D)mod N。A是一個有順序的數,C就是一個看似無規律的偽隨機數。Mod運算表示求模,例如7Mod3=1。意思是7除以3餘1。類似地8Mod3=2,9Mod3=0。EXP表示前面數的後面數次方,AEXPD表示A的D次方。這兩個運算清楚了,其它的也就沒什麼困難的了,*是乘法的意思,大多數理科生都清

2. 誰知道資料庫中怎樣產生隨機數

公式:(上限-下限+1)* rand() -下限

介紹:John von Neumann說:Any one who considers arithmetical methods of procing random digits is , of course, in a state of sin.

所以,在討論演算法實現隨機數的時候,總是說「偽隨機數」。

現在,應用最廣的隨機數生成演算法是由Derrick Henry Lehmer1951年給出的線性同餘法:

Xn+1 = ( aXn + c ) mod m, n>=0.

在上一篇偽隨機數的論述中,並沒有給出X0, a, c, m的取值規則,只是給出了ANSI C和Microsoft Visual C++的實現。

在這兒我們可以自己先思考一下,我們期望從上式中得到的隨機數應該滿足:

1) 上式的輸出足夠隨機,這是最基本的要求;

2) 上式給出盡量多的輸出,越接近m個越好(不可能超過m),即周期盡量長,最好為m,這樣才能保證上式滿足均勻分布(m個數在周期m中各出現一次);

3) 上式的生成速度足夠快。

最容易想到的,m的取值為計算機字大小(如2^32或2^64)。

但是這兒有個很嚴重的問題:Xn低位的隨機性很弱。原因如下:

令d|m, 且

Yn = Xn mod d



Yn+1 = ( ( aXn + c ) mod m ) mod d

= ( aYn + c ) mod d

上述表達式的意義即:Yn為Xn低k位(d=2^k),這樣的Yn序列形成周期為d甚至更短的同餘序列。舉例說明:d為2^1時,Yn為Xn的最低位(可假定為1或0),若Yn+1 != Yn,則Yn+2 == Yn必定成立,僅當a、c皆為奇數時Yn、Yn+1將0、1交替,否則,為常數(0或1)。

暫時拋開隨機性不管,先找到周期為m的隨機序列中的取值規則。

Donald Knuth在The Art of Computer Programming, Volume 2: Seminumerical Algorithms中的3.2.1.2節對m, a, c和X0取值規則的表述:

1) gcd(c, m) = 1. 即c, m互素,再白一點,c, m除1之外沒有其他公因子;

2) 任給質數p, p|m ==> p|(a-1). 即m%p==0,則(a-1)%p==0。

3) 4|m ==> 4|(a-1). 即m%4==0,則(a-1)%4==0。

這個證明過程對於我這樣的數論基礎不是很扎實的搞應用技術的人來說有點難以理解了。有興趣的話,還是去看3.2.1.2的證明吧:-)。

上面的規則告訴我們,滿足了上述規則後,可以保證序列周期為m。對於前面提到的關於隨機性的問題,既然Xn低位的隨機性比較弱,可以只取Xn的高位作為輸出。高位的隨機性和統計意義由a, c確定,其取值涉及統計檢驗,具體的也還是看3.3吧。

這篇文章解決了具有統計意義的隨機數的部分理論問題。

PS: 之前曾經BS過Windows Live Writer,當時覺得Writer編輯功能太少,不能直接設定鏈接文字的字體顏色,知道CSS可以設定之後,又覺得Word 2007編輯的Blog轉成html之後太大,而且也知道Word 2007上面是可以設置鏈接的target為_blank的。現在發現Writer還是很不錯的了,原來是可以設定格式的,也可以直接編輯html,而且可以Web預覽,鏈接還可以加入到鏈接詞彙表,挺方便的。

3. 隨機數演算法是什麼

在計算機中並沒有一個真正的隨機數發生器,但是可以做到使產生的數字重復率很低,這樣看起來好象是真正的隨機數,實現這一功能的程序叫偽隨機數發生器。有關如何產生隨機數的理論有許多如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供一個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。「種子」的值通常是用快速計數寄存器或移位寄存器來生成的。下面講一講在C語言里所提供的隨機數發生器的用法。現在的C編譯器都提供了一個基於ANSI標準的偽隨機數發生器函數,用來生成隨機數。它們就是rand()和srand()函數。這二個函數的工作過程如下:」)首先給srand()提供一個種子,它是一個unsignedint類型,其取值范圍從0~65535;2)然後調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)3)根據需要多次調用rand(),從而不間斷地得到新的隨機數;4)無論什麼時候,都可以給srand()提供一個新的種子,從而進一步「隨機化」rand()的輸出結果。這個過程看起來很簡單,問題是如果你每次調用srand()時都提供相同的種子值,那麼,你將會得到相同的隨機數序列,這時看到的現象是沒有隨機數,而每一次的數都是一樣的了。例如,在以17為種子值調用srand()之後,在首次調用rand()時,得到隨機數94。在第二次和第三次調用rand()時將分別得到26602和30017,這些數看上去是很隨機的(盡管這只是一個很小的數據點集合),但是,在你再次以17為種子值調用srand()後,在對於rand()的前三次調用中,所得的返回值仍然是在對94,26602,30017,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此只有再次給srand()提供一個隨機的種子值,才能再次得到一個隨機數。下面的例子用一種簡單而有效的方法來產生一個相當隨機的「種子」值----當天的時間值:g#椋睿悖歟醯洌澹Γ歟簦唬螅簦洌椋錚瑁Γ紓簦弧。#椋睿悖歟醯洌澹Γ歟簦唬螅簦洌歟椋猓瑁Γ紓簦弧。#椋睿悖歟醯洌澹Γ歟簦唬螅螅Γ#矗罰唬簦穡澹螅瑁Γ紓簦弧。#椋睿悖歟醯洌澹Γ歟簦唬螅螅Γ#矗罰唬簦椋恚澹猓瑁Γ紓簦弧。觶錚椋洹。恚幔椋睿ǎ觶錚椋洌。。椋睿簟。椋弧。醯睿螅椋紓睿澹洹。椋睿簟。螅澹澹洌鄭幔歟弧。螅簦潁醯悖簟。簦椋恚澹狻。簦椋恚澹攏醯媯弧。媯簦椋恚澹ǎΓ幔恚穡唬簦椋恚澹攏醯媯弧。螅澹澹洌鄭幔歟劍ǎǎǎǎ醯睿螅椋紓睿澹洹。椋睿簦簦椋恚澹攏醯媯簦椋恚澹Γ幔恚穡唬埃疲疲疲疲。ǎ醯睿螅椋紓睿澹洹。椋睿簦簦椋恚澹攏醯媯恚椋歟歟椋簦恚蕖。ǎ醯睿螅椋紓睿澹洹。椋睿簦簦椋恚澹攏醯媯恚椋歟歟椋簦恚弧。螅潁幔睿洌ǎǎ醯睿螅椋紓睿澹洹。椋睿簦螅澹澹洌鄭幔歟弧。媯錚潁ǎ椋劍埃唬椋Γ歟簦唬保埃唬椋。穡潁椋睿簦媯ǎΓ瘢醯錚簦唬ィ叮洌Γ#梗玻唬睿Γ瘢醯錚簦籦egjrand());}上面的程序先是調用_ftime()來檢查當前時間yc並把它的值存入結構成員timeBuf.time中wae當前時間的值從1970年1月1日開始以秒計算aeh在調用了_ftime()之後在結構timeBuf的成員millitm中還存入了當前那一秒已經度過的毫秒數,但在DOS中這個數字實際上是以百分之一秒來計算的。然後,把毫秒數和秒數相加,再和毫秒數進行異或運算。當然也可以對這兩個結構成員進行更多的計算,以控制se......餘下全文>>

4. 電腦中的隨機數是怎麼生成的(硬體方面的原理)

http://ke..com/view/1127.htm

偽隨機數的生成方法
一般地,偽隨機數的生成方法主要有以下3種[6]:
(1) 直接法(Direct Method),根據分布函數的物理意義生成。缺點是僅適用於某些具有特殊分布的隨機數,如二項式分布、泊松分布。
(2) 逆轉法(Inversion Method),假設U服從[0,1]區間上的均勻分布,令X=F-1(U),則X的累計分布函數(CDF)為F。該方法原理簡單、編程方便、適用性廣。
(3)接受拒絕法(Acceptance-Rejection Method):假設希望生成的隨機數的概率密度函數(PDF)為f,則首先找到一個PDF為g的隨機數發生器與常數c,使得f
[偽隨機數發生器]

偽隨機數發生器
(x)≤cg(x),然後根據接收拒絕演算法求解。由於演算法平均運算c次才能得到一個希望生成的隨機數,因此c的取值必須盡可能小。顯然,該演算法的缺點是較難確定g與c。 因此,偽隨機數生成器(PRNG)一般採用逆轉法,其基礎是均勻分布,均勻分布PRNG的優劣決定了整個隨機數體系的優劣[7]。下文研究均勻分布的 PRNG。
隨機數的「廬山真面目」
首先需要聲明的是,計算機不會產生絕對隨機的隨機數,計算機只能產生「偽隨機數」。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。
偽隨機數並不是假隨機數,這里的「偽」是有規律的意思,就是計算機產生的偽隨機數既是隨機的又是有規律的。怎樣理解呢?產生的偽隨機數有時遵守一定的規律,有時不遵守任何規律;偽隨機數有一部分遵守一定的規律;另一部分不遵守任何規律。比如「世上沒有兩片形狀完全相同的樹葉」,這正是點到了事物的特性,即隨機性,但是每種樹的葉子都有近似的形狀,這正是事物的共性,即規律性。從這個角度講,你大概就會接受這樣的事實了:計算機只能產生偽隨機數而不能產生絕對隨機的隨機數。(嚴格地說,這里的計算機是指由馮諾依曼思想發展起來的電子計算機。而未來的量子計算機有可能產生基於自然規律的不可重現的「真」隨機數)。

5. 有哪些隨機數演算法呢

1、數值概率演算法:用於數值問題的求解。所得到的解幾乎都是近似解,近似解的精度
隨著計算時間的增加而不斷地提高。
2、拉斯維加斯演算法(LasVegas):要麼給出問題的正確答案,要麼得不到答案。反復求解多次,可
使失效的概率任意小。
3、蒙特卡羅演算法(MonteCarlo):總能得到問題的答案,偶然產生不正確的答案。重復運行,每一次
都進行隨機選擇,可使不正確答案的概率變得任意小。
4、舍伍德演算法(Sherwood):很多具有很好的平均運行時間的確定性演算法,在最壞的情況下性能很
壞。引入隨機性加以改造,可以消除或減少一般情況和最壞情況的差別。

6. 詳解隨機數的生成

隨機數參與的應用場景大家一定不會陌生,比如密碼加鹽時會在原密碼上關聯一串隨機數,蒙特卡洛絕喊雀演算法會通過隨機數采樣等等。Python內置的random模塊提供了生成隨機數的方法,使用這些方法時需要導入random模塊。

下面介紹下Python內置的random模塊的幾種生並早成隨機數滲租的方法。

1、random.random()隨機生成 0 到 1 之間的浮點數[0.0, 1.0)。注意的是返回的隨機數可能會是 0 但不可能為 1,即左閉右開的區間。

2、random.randint(a , b)隨機生成 a 與 b 之間的整數[a, b],a<=n<=b,隨機整數不包含 b 時[a, b)可以使用 random.randrange() 方法。

3、random.randrange(start,stop,step)按步長step隨機在上下限范圍內取一個隨機數,start<=n<stop。

4、random.uniform(a, b)隨機生成 a 與 b 之間的浮點數[a, b],a<=n<=b。

5、random.choice()從列表中隨機取出一個元素,比如列表、元祖、字元串等。注意的是,該方法需要參數非空,否則會拋出 IndexError 的錯誤。

6、random.shuffle(items) 把列表 items 中的元素隨機打亂。注意的是,如果不想修改原來的列表,可以使用 模塊先拷貝一份原來的列表。

7、random.sample(items, n)從列表 items 中隨機取出 n 個元素。

Python 的random模塊產生的隨機數其實是偽隨機數,依賴於特殊演算法和指定不確定因素(種子seed)來實現。如randint方法生成一定范圍內的隨機數,會先指定一個特定的seed,將seed通過特定的隨機數產生演算法,得到一定范圍內隨機分布的隨機數。因此對於同一個seed值的輸入產生的隨機數會相同,省略參數則意味著使用當前系統時間秒數作為種子值,達到每次運行產生的隨機數都不一樣。

numpy庫也提供了random模塊,用於生成多維度數組形式的隨機數。使用時需要導入numpy庫。

下面介紹下numpy庫的random模塊的幾種生成隨機數的方法。

1、numpy.random.rand(d0,d1,…,dn)

2、numpy.random.randn(d0,d1,…,dn)

3、numpy.random.randint(low, high=None, size=None, dtype=』l』)

4、numpy.random.seed()

熱點內容
多個撥號寬頻如何配置 發布:2025-03-16 05:51:35 瀏覽:686
管理員c語言 發布:2025-03-16 05:40:17 瀏覽:340
安卓軟體上的圖案如何更改 發布:2025-03-16 05:35:57 瀏覽:746
2010編譯c中文亂碼 發布:2025-03-16 05:33:40 瀏覽:548
干一杯密碼箱酒多少錢一箱 發布:2025-03-16 05:31:15 瀏覽:356
我的零錢通密碼是多少 發布:2025-03-16 05:04:36 瀏覽:937
編程貓酷跑 發布:2025-03-16 04:58:35 瀏覽:321
控制演算法規律 發布:2025-03-16 04:54:17 瀏覽:965
tcl門鎖原始設置密碼是多少 發布:2025-03-16 04:52:37 瀏覽:992
如何給wifi加密碼 發布:2025-03-16 04:52:05 瀏覽:367