當前位置:首頁 » 編程語言 » C語言線性同餘法格式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言線性同餘法格式

發布時間: 2022-08-14 22:10:01

㈠ 線性同餘法(或者稱混合同餘數法)的遞推同餘式

線性同餘法(或者稱混合同餘數法)的遞推同餘式是
X(i)=λX(i-1)+C (modM) (i=1,2,……n)
λ,C為常數

c語言中rand()%m是啥意思

rand()%m這個函數是隨機產生0到m-1的隨機數;比如rand()%10就是隨機產生0到9的隨機數。

拓展資料

使用C語言的rand函數,生成的是偽隨機數;

c語言之rand函數的使用

1、寫入頭文件

生成隨機數rand函數的用法:

函數rand()是真正的隨機數生成器,而srand()會設置供rand()使用的隨機數種子。如果你在第一次調用rand()之前沒有調用srand(),那麼系統會為你自動調用srand()。而使用同種子相同的數調用 srand()會導致相同的隨機數序列被生成。

srand((unsigned)time(NULL))則使用系統定時/計數器的值做為隨機種子。每個種子對應一組根據演算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(NULL)改為srand(TP)(TP為任一常量),則無論何時運行、運行多少次得到的「隨機數」都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

㈢ c語言問題,

rand()函數是採用線性同餘演算法來生成偽隨機數序列的,它依賴一個隨機種子來計算隨機序列的第一個數,如果隨機種子是相同的,那麼生成的隨機序列就是相同的。
srand()函數的作用就是生成隨機種子,通常它的參數是time(NULL),表示使用當前系統時間戳(單位為秒)作為隨機種子。每次調用srand()都會將隨機序列重置,下一次調用rand()將返回隨機序列的第一個數。由於程序執行很快,循環在1秒之內就已經完成,time(NULL)每次取到的時間戳都是相同的,srand()自然產生相同的隨機序列。下一次調用rand(),總是返回這個序列的第一個數。
而如果將srand()放在循環外,那麼srand只會在程序中運行一次,生成一個隨機種子。接下來循環調用rand()函數,將根據這個隨機種子,不斷生成隨機序列的下一個數。

㈣ c 語言函數裡面有個隨即數:rand(),但是總是產生346這個數,怎麼辦

(1)添加頭文件 #include"windows.h"
然後在文件中添加srand((unsigned)GetCurrentTime());或srand((unsigned)GetTickCount());
或者
(2)添加頭文件 #include<time.h>
然後在文件中添加 srand((unsigned)time(NULL));
解釋:
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同餘法做的,它不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的.

㈤ 線性同餘法產生偽隨機數流,給定初始值:a=5,c=3,m6,種子值=5,則生成的第一個[0,1]區

咨詢記錄 · 回答於2021-10-11

㈥ C++產生隨機數的程序

r = 2053.0 * r + 13849.0; //這是兩個有個是素數吧 應該是的 2053就是
//質因數分解13849=11*1259
//那麼這兩個素數的公倍數大於65535吧
//而65535是unsigned short兩個位元組吧
//這樣遞歸 乘開後就能分散到(低2位元組)所有0-65536的數字

這個隨機產生辦法的靈魂就在這句了:r = 2053.0 * r + 13849.0

其實就是《線性同餘法》 產生的隨機數
線性同餘法:一般遞推公式為:Xn = (a*X(n-1) + c)%M Rn = Xn/M
其中M為模數,a為常子(乘數),c為增量(加數),且均為非負整數.

給定一組參數,就可以得到一列數,它是否具有類似於均勻隨機變數的獨立抽樣序列的性質,與這些參數的選擇有關.例如,用下面的遞推公式產生的隨機數就是比較好的隨機數:
a=235 c=0 M=0xFFF-21 種子x0小於M就行

s = (int)(r / 65536.0); //取整 得到高字(高2位元組)部分的整數
r = r - s * 65536.0; //去掉高字(高2位元組)部分的整數 不細講 分解就知道 明顯
其實你會發現 上面3句後 s和r仍然為整數 下面假定r, s是unsigned int了

改寫上面兩句,就容易理解了:(去掉乘除法, 速度還能快一點)
r = r & 0xFFFF; //(一個語句解決,看明白了吧) r的值在0-65536之間

rnd = r / 65536.0; //65536.0使除法不進行整數除法 rnd是0和1之間 由上面一看就知道了

程序好一點的寫法:

float MyRand(unsigned int seed=1)
{
static unsigned int _seed = seed& 0xFFFF; //第一次初始化種子
_seed = (2053 * _seed + 13849) & 0xFFFF;
return (float)_seed / (float)(0xFFFF);
}

就這樣吧

㈦ C語言所有語句格式

循環結構是程序中一種很重要的結構。其特點是, 在給定條件成立時,反復執行某程序段,直到條件不成立為止。 給定的條件稱為循環條件,反復執行的程序段稱為循環體。 C語言提供了多種循環語句,可以組成各種不同形式的循環結構。

while語句

while語句的一般形式為: while(表達式)語句; 其中表達式是循環條件,語句為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體語句。其執行過程可用圖3—4表示。 統計從鍵盤輸入一行字元的個數。
#include <stdio.h>
void main(){
int n=0;
printf("input a string:\n");
while(getchar()!='\n') n++;
printf("%d",n);
}
本常式序中的循環條件為getchar()!='\n',其意義是, 只要從鍵盤輸入的字元不是回車就繼續循環。循環體n++完成對輸入字元個數計數。從而程序實現了對輸入一行字元的字元個數計數。
使用while語句應注意以下幾點:
1.while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續循環。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
while (n--)
printf("%d ",a++*2);
}
本常式序將執行n次循環,每執行一次,n值減1。循環體輸出表達式a++*2的值。該表達式等效於(a*2;a++)
2.循環體如包括有一個以上的語句,則必須用{}括起來, 組成復合語句。
3.應注意循環條件的選擇以避免死循環。
void main(){
int a,n=0;
while(a=5)
printf("%d ",n++);
}
本例中while語句的循環條件為賦值表達式a=5, 因此該表達式的值永遠為真,而循環體中又沒有其它中止循環的手段, 因此該循環將無休止地進行下去,形成死循環。4.允許while語句的循環體又是while語句,從而形成雙重循環。

do-while語句

do-while語句的一般形式為:
do
語句;
while(表達式);
其中語句是循環體,表達式是循環條件。
do-while語句的語義是:
先執行循環體語句一次, 再判別表達式的值,若為真(非0)則繼續循環,否則終止循環。
do-while語句和while語句的區別在於do-while是先執行後判斷,因此do-while至少要執行一次循環體。而while是先判斷後執行,如果條件不滿足,則一次循環體語句也不執行。
while語句和do-while語句一般都可以相互改寫。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
do printf("%d ",a++*2);
while (--n);
}

在本例中,循環條件改為--n,否則將多執行一次循環。這是由於先執行後判斷而造成的。
對於do-while語句還應注意以下幾點:
1.在if語句,while語句中, 表達式後面都不能加分號, 而在 do-while語句的表達式後面則必須加分號。
2.do-while語句也可以組成多重循環,而且也可以和while語句相互嵌套。
3.在do和while之間的循環體由多個語句組成時,也必須用{}括起來組成一個復合語句。
4.do-while和while語句相互替換時,要注意修改循環控制條件。

㈧ C中,rand()是什麼意思,有什麼作用

rand()是表示產生隨機數的一種函數,多應用於循環語句當中進行判斷。

比如說n=rand();

switch(n)

{case1.......

case2......}

這些都是都可能被執行的,因為數字是隨機的。

(8)C語言線性同餘法格式擴展閱讀:

注意

rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種了,為基準以某個遞推公式推算出來的一系數,

當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了 srand()函數,它的原形是void srand( int a) ,

功能是初始化隨機產生器既rand()函數的初始值,即使把種子的值改成a; 從這你可以看到通過sand()函數,可以產生可以預見的隨機序列。

參考資料來源:rand函數-網路

㈨ (C語言)線性同餘產生隨機數的問題。 線性同餘隨機數發生器是按Xn+1 = (aXn+c)%m

這題你可以直接全部算就行了,要記錄下每一次算出來的結果,如果算出來的結果是已經產生過的,那就證明陷入循環了,不能產生所以的0~m-1的數,如果全部找到都還沒有算出重復的,那就說明可以產生所有數

㈩ C語言中的rand()函數怎麼用

rand()

rand()函數用來產生隨機數,但是,rand()的內部實現是用線性同餘法實現的,是偽隨機數,由於周期較長,因此在一定范圍內可以看成是隨機的。

rand()會返回一個范圍在0到RAND_MAX(至少是32767)之間的偽隨機數(整數)。

在調用rand()函數之前,可以使用srand()函數設置隨機數種子,如果沒有設置隨機數種子,rand()函數在調用時,自動設計隨機數種子為1。隨機種子相同,每次產生的隨機數也會相同。

rand()函數需要的頭文件是:<stdlib.h>

rand()函數原型:int rand(void);

使用rand()函數產生1-100以內的隨機整數:int number1 = rand() % 100+1。

srand()

srand()函數需要的頭文件仍然是:<stdlib.h>

srand()函數原型:void srand (usigned int seed);

srand()用來設置rand()產生隨機數時的隨機數種子。參數seed是整數,通常可以利用time(0)或getpid(0)的返回值作為seed。

使用rand()和srand()產生1-100以內的隨機整數:

srand(time(0));

int number1 = rand() % 100+1。