C語言用線性同余法求隨機(jī)數(shù) ?x[k+1] = (a*x[k] + c) % m
- 教育綜合
- 2023-02-24 12:58:38
(C語言)線性同余產(chǎn)生隨機(jī)數(shù)的問題。 線性同余隨機(jī)數(shù)發(fā)生器是按Xn+1 = (aXn+c)%m
這題你可以直接全部算就行了,要記錄下每一次算出來的結(jié)果,如果算出來的結(jié)果是已經(jīng)產(chǎn)生過的,那就證明陷入循環(huán)了,不能產(chǎn)生所以的0~m-1的數(shù),如果全部找到都還沒有算出重復(fù)的,那就說明可以產(chǎn)生所有數(shù)用線性同余法生成隨機(jī)數(shù)序列的公式為:
用線性同余法生成隨機(jī)數(shù)序列的公式為:rk = ( multiplier * rk-1 + increment ) % modulus。 線性同余法主要是運(yùn)用取模的運(yùn)算來獲取隨機(jī)數(shù),是一種在一些要求較低的場(chǎng)合能基本滿足產(chǎn)生均勻分布隨機(jī)數(shù)的方法。 數(shù)論中線性同余方程是最基本的同余方程,“線性”表示方程的未知數(shù)次數(shù)是一次。 隨機(jī)數(shù)是實(shí)現(xiàn)由已知分布抽樣的基本量,在由已知分布的抽樣過程中,將隨機(jī)數(shù)作為已知量,用適當(dāng)?shù)臄?shù)學(xué)方法可以由它產(chǎn)生具有任意已知分布的簡(jiǎn)單子樣。由具有已知分布的總體中抽取簡(jiǎn)單子樣,在蒙特卡羅方法中占有非常重要的地位??傮w和子樣的關(guān)系,屬于一般和個(gè)別的關(guān)系,或者說屬于共性和個(gè)性的關(guān)系。由c語言隨機(jī)數(shù)問題,高手幫忙一下。
c語言庫函數(shù)里的隨機(jī)函數(shù)rand產(chǎn)生的是偽隨機(jī)數(shù),也就不是真正的隨機(jī),而是一段無序排列的數(shù)。比如這樣 3,345,56,7,8,234,5677,888,,當(dāng)然順序和我說的不一樣,但是無序的。 但也是固定的。 也就是說加入你不指定種子,產(chǎn)生的隨機(jī)書序列,每次都一樣。 有了種子,相當(dāng)于,從一個(gè)你指定的地方取一個(gè)子序列,所以,種子不一樣,產(chǎn)生的隨機(jī)數(shù)序列就不一樣。 但是只要種子一樣,產(chǎn)生的隨機(jī)數(shù)序列還是一樣的。懂了么? 另外說下,要產(chǎn)生真正的隨機(jī)數(shù)序列,是很復(fù)雜的。C語言中獲得隨機(jī)數(shù)的方法
C語言/C++怎樣產(chǎn)生隨機(jī)數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),C語言/C++里沒有自帶的random(int number)函數(shù)。 (1) 如果你只要產(chǎn)生隨機(jī)數(shù)而不需要設(shè)定范圍的話,你只要用rand()就可以了:rand()會(huì)返回一隨機(jī)數(shù)值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。 例如:#include用C語言寫出一道關(guān)于隨機(jī)數(shù)的編程題
#include "stdio.h" #include "string.h" #include "stdlib.h" #include "time.h" #define NUMLEN 69 #define BigNum char * void bigNumCpy(BigNum a, const BigNum b)//大數(shù)間復(fù)制 { memcpy(a, b, NUMLEN); } int add(const BigNum a, const BigNum b, BigNum c)//大數(shù)加法 { int i; int t1 = 0, t2; BigNum d = new char[NUMLEN];展開全文閱讀