跳至內容

數論/32位線性同餘生成器

來自華夏公益教科書,開放的書籍,開放的世界

在 32 位計算機上,偽隨機數使用基數 b = 40,014 和模數 m = 2,147,483,563 = 231 − 85 的線性同餘生成器生成。由於模數 m = 2,147,483,563 是一個素數,因此根據費馬小定理,對於任何不除以 2,147,483,563 的整數 x, 它還表明 x 模 2,147,483,563 的乘法階必須是 2,147,483,562 或其真因子之一。基數 b = 40,014 是模 2,147,483,563 的本原根,所以這個序列具有 2,147,483,562 的完整週期長度。

模算術

[編輯 | 編輯原始碼]

對於任何素數 p,費馬小定理保證任何不除以 p 的整數 x 都滿足以下同餘式:

例如,對於素數 p = 13 和基數 x = 2,我們將這些值代入方程:212 = 4,096。費馬小定理預測這個數模 13 同餘 1。事實上,它是:4,096 = 13 × 315 + 1,所以

在素模中,任何整數最多隻有兩個平方根。同餘式 只有平凡解 a = ± 1 模 p。例如,單位模 13 的唯一平方根是 1 和 12。這對複合模不成立;例如,模 15 的單位有四個平方根:1、4、11 和 14。

由於 2,147,483,563 是一個素數,對於任何不與零模 2,147,483,563 同餘的 x: 同樣,2,147,483,562 的一半是 1,073,741,781,因此要麼.

由於 40,014 是一個本原根,它不是二次剩餘,所以 。因此,此值標誌著週期的中點。

科學計算器函式

[編輯 | 編輯原始碼]

德州儀器計算器 TI-30X IIS 內建了一個偽隨機數生成器,它使用儲存在記憶體中的“rand”的值,可以透過按“MEMVAR”訪問。要更改“rand”的值,請按“STO”,按一次左箭頭按鈕,然後按“ENTER”將一個整數儲存到此變數中。一旦一個整數儲存到此變數中,它通常會保持不變,僅當生成偽隨機數時才會改變。每當生成一個偽隨機數時,“rand”的值將根據以下公式改變:(新整數)= 40,014 ×(當前整數)模 2,147,483,563。

要生成一個偽隨機數,請按“PRB”並使用“RAND”或“RANDI”。請注意,這裡“RAND”全部大寫,以區分儲存在記憶體中的整數變數。“RAND”是介於零和一之間的偽隨機十進位制數,透過將新的“rand”值除以 2,147,483,563 計算得出。例如,如果 rand = 500,000,000,那麼 RAND = 德州儀器計算器將小數四捨五入到最接近的十億分之一,顯示小數點後九位數;在本例中,顯示為 0.232830653。

RANDI 是一個接受兩個引數的函式:RANDI(a, b) 生成一個介於 a 和 b 之間的偽隨機整數(包括 a 和 b)。

屬性

[edit | edit source]
  • 迴圈的第一個項是 1,之後的每一項都透過乘以 40,014 並取模 2,147,483,563 的餘數來計算。
    • 第二項:40,014
    • 第三項:40,014 × 40,014 = 1,601,120,196
    • 第四項:1,346,387,765 因為
    • 第五項:439,883,729 因為
  • 隨機數序列每 2,147,483,562 個項重複一次。
  • 40,014 的乘法逆元是 2,082,061,899,因為 。數字 2,082,061,899 是迴圈的最後一項,之後迴圈從頭開始。
    • 可以透過將 77,872,045 儲存為種子值(在計算器的記憶體儲存中稱為“rand”),然後生成 5 個隨機數來檢視迴圈的最後 5 項。
  • 40,014 的負乘法逆元是 65,421,664,因為 。這標誌著迴圈的中點。
    • 由於計算器上 9 位數的精度設定,所有小數值都顯示為四捨五入到最接近的十億分之一,因此在將 65,421,664 儲存為種子值後,“RAND”的第一個值顯示為等於 1。實際上,此值為 ,它非常接近於 1,與 1 的差僅為 4.66 × 10−10,因此在計算器將其四捨五入到小數點後九位時,它會四捨五入到 1.000000000。
    • 數字 65,421,664 是迴圈前半部分的最後一項。
  • 數字 2,147,483,563 − 40,014 = 2,147,443,549 是迴圈後半部分的第一項。

值表

[edit | edit source]

注意:在此表中,m = 2,147,483,563。所有 RAND 值都四捨五入到九位有效數字。雖然科學計算器截斷以零結尾的 9 位小數,但此表中將保留最後的零(即,“0.123456000”,而不是“0.123456”)。

n RAND
1 40,014 0.000018633
2 1,601,120,196 0.745579721
3 1,346,387,765 0.626960685
4 439,883,729 0.204836832
5 732,249,858 0.340980425
6 2,127,568,003 0.990726094
7 1,962,667,596 0.913938355
8 707,287,434 0.329356390
9 1,860,990,862 0.866591435
10 1,695,805,043 0.789670791
11 1,904,850,491 0.887015167
12 53,445,315 0.024887415
13 1,814,689,225 0.845030554
14 112,933,431 0.052588729
15 612,891,482 0.285399848
16 2,124,954,851 0.989509251
17 479,214,492 0.223151646
18 407,948,861 0.189965999
19 643,161,691 0.299495513
20 28,884,682 0.013450479
21 445,508,654 0.207456142
22 322,224,693 0.150047571
23 7,553,450 0.003517349
24 1,596,049,480 0.743218485
25 310,212,663 0.144454034
26 394,503,142 0.183704848
27 1,644,535,938 0.765796752
28 1,269,685,686 0.591243494
29 36,906,150 0.017185766
30 1,441,478,319 0.671240676
31 52,437,849 0.024418277
32 156,648,835 0.072945301
33 1,789,446,856 0.833276160
34 1,529,538,438 0.712246866
35 1,816,996,195 0.846104821
36 82,237,802 0.038294962
37 718,590,712 0.334619889
38 1,031,324,961 0.480248128
39 1,392,842,846 0.648593018
40 1,720,212,868 0.801036570
41 1,454,538,876 0.677322472
42 819,059,838 0.381404474
43 1,113,702,789 0.518608295
44 1,271,983,233 0.592313373
45 1,776,642,162 0.827313509
46 263,600,716 0.122748654
47 1,427,272,131 0.664625404
48 689,175,412 0.320922322
49 828,503,285 0.385801922
50 1,026,683,959 0.478086993
華夏公益教科書