日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性同余法求伪随机数序列

發布時間:2024/8/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性同余法求伪随机数序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用線性同余法求隨機數,也可稱作利用線性同余法求偽隨機序列.

線性同余法是一種求隨機數的方法,它所求得得隨機數的序列是成周期性,同時它是根據公式計算求得得隨機數并非是由硬件產生的隨機數所以被稱作偽隨機序列.隨機序列的循環周期的大小取決于相關參數的選取,如果選取參數得當,可以將此循環周期拉得很長.

以下算法是輸入相關參數后,計算并產生隨機數,然后輸出循環周期的長度.

線性同余法公式:

a,b,m是隨機數產生器設定的常數.

mod:表示對m取余,即%m.

x(0)被稱為種子,x(n)與x(n-1)是隨著運算進行是變化的
關于a,b,m的取值,決定著隨機序列周期的長短,滿足以下條件后,可以讓序列周期長度達到m,各個隨機數不重合,且這些隨機數序列包含了0到m的所有數.
1. b和m互質,即公約數只有1
2. M的所有質因子的積能夠整除a-1,如若m是3的倍數,a-1也是3的倍數
3. a,b,x0 都要比M小
4. a,b是正整數
例如:a=6 x0=4 b=7 m=25
? ?a=5 x0=6 b=15 m=16
注意:一般應用中為了保證隨機數序列盡量不重復,一般選取計算時候的時鐘作為種子來開始計算
?

代碼實現:

輸入參數:a,x0,b,m

輸出一個完整序列中的所有隨機數,并輸出此隨機數序列的長度.

如:輸入:

a=5
x0=6
b=15
m=16

輸出:
13 0 15 10 1 4 3 14 5 8 7 2 9 12 11 6?
length of the sequence is 16


代碼:

#include <stdio.h> int CalRandNum(int a,int x0,int b,int m) {int xn;xn = (a*x0 + b)%m;return xn; } int main() {int a,b,m,x0,xn,x1;int i = 0;printf("a=");scanf("%d",&a);printf("x0=");scanf("%d",&x0);printf("b=");scanf("%d",&b);printf("m=");scanf("%d",&m);x1 = CalRandNum(a, x0, b, m);while(xn!=x1){if(i==0){xn = x1;}printf("%d ",xn);i++;xn = CalRandNum(a, xn, b, m);}printf("\r\nlength of the sequence is %d\r\n",i); return 0; }

?

總結

以上是生活随笔為你收集整理的线性同余法求伪随机数序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。